【发布时间】:2016-07-06 09:20:02
【问题描述】:
我在我的项目中使用 Retrofit 2。 我对以下情况有疑问。
当我打电话给API 和server 时,告诉我带有error code 的request was not executed 是4xx 或500,并带有问题的详细信息。
但似乎retrofit 明白这是一个http error 并且没有从Server 收集error message。
我看到了同样的问题here,但它没有解决我的问题。
我完全得到响应成功,我确信我的实施没有问题。
@Override
public void onResponse(Response<CustomResponse> response, Retrofit retrofit) {
Log.d("Response : ", response.body(), response.code()); // here i got response.body() is null if response code is not 200, if response code is 200 -- it work well as I expected.
onRequestSuccess(response);
}
我查看了retrofit 中的Response 类,我看到以下代码:
private Response(com.squareup.okhttp.Response rawResponse, T body, ResponseBody errorBody) {
this.rawResponse = checkNotNull(rawResponse, "rawResponse == null");
this.body = body;
this.errorBody = errorBody;
}
还有
public static <T> Response<T> error(ResponseBody body, com.squareup.okhttp.Response rawResponse) {
return new Response<>(rawResponse, null, body);
}
似乎当server中的response代码不是200时,retrofit明白这是错误并将body设置为null。
那么在这种情况下,任何人都可以帮助获得response body 的“正确”值吗?
【问题讨论】:
-
只需使用 response.errorBody()
-
这没有帮助。 response.Body().string() = ""
标签: android retrofit okhttp retrofit2