5
我有一個像改造2 - 獲取錯誤對象JSON(用於相同的請求數POJO)
/*LOGIN*/
@FormUrlEncoded
@POST("v1/user/login") //your login function in your api
Call<LoginResponce> login(@Field("identity") String identity,
@Field("password") String password);
它返回LoginResponceobject如果任何HTTP代碼200
{"token":"itwbwKay7iUIOgT-GqnYeS_IXdjJi","user_id":17}
或錯誤的Json簡單的要求,介紹確切的錯誤,如果出了什麼問題
{"status":4,"description":"user provided token expired"}
如何處理錯誤狀態作爲迴應?
我試過這個,但是在原始文本中看不到JSON(doens't work)。而且似乎不是很好的解決方案。
mCallLoginResponse.enqueue(new Callback<LoginResponce>() {
@Override
public void onResponse(Response<LoginResponce> response, Retrofit retrofit) {
if (response.isSuccess()) {
registerWithToken(response.body().getToken());
} else { //some error in responce
Gson gson = new GsonBuilder().create();
ApiError mApiError = gson.fromJson(response.raw().body().toString(),
ApiError.class); //Exception here - no JSON in String
//todo error handling
}
}
這引發IOException。爲什麼? response.errorBody()。toString()不起作用。我期望它返回原始響應字符串。 – DmitryBorodin
是的,'string'可以拋出'IOException'因爲正文是流式傳輸。當你調用'string'時,響應從網絡中讀出。 – iagreen
這是否意味着在非200代碼的情況下翻新不會讀取身體? 如何讀取asynchronius網絡調用正文中的網絡響應?至於我的理解,「網絡連接完成後執行」onResponse「回調。 所以,如果翻新會發送新的請求,這意味着我不能把「onResponse」放在UI線程中,我現在就這樣做。 – DmitryBorodin