我在我的项目中使用Retrofit 2。 我对下面的情况有疑问。
当我致电API
并server
时,告诉我equest was not executed
与error code
的{{1}}为4xx
或500
,并附有详细讯息问题。
但似乎retrofit
知道它是http error
并且未从error message
收集Server
。
我看到了同样的问题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);
}
我查看Response
中的retrofit
课程,我看到下面的代码:
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);
}
似乎来自response
的{{1}}代码不是server
,200
了解它是错误的,并将retrofit
设置为body
。< / p>
因此,在这种情况下,任何人都可以帮助获得null
的“正确”值吗?
答案 0 :(得分:2)
使用类似的东西:
if(response.isSuccessful()){
response.body()
} else{
response.errorBody()
}
答案 1 :(得分:1)
当服务器的响应不正确时,您必须捕获错误正文并将其解析为errorModel。例如:
override init() {
super.init()
FIRApp.configure()
// not really needed unless you really need it FIRDatabase.database().persistenceEnabled = true
}
答案 2 :(得分:0)
尝试解析这样的响应:
@Override
public void onResponse(Call<Void> call, Response<Void> response) {
//hideLoadingDialog();
if (response.isSuccess()) {
Toast.makeText(ProximityFeedbackActivity.this, "Feedback successfully sent", Toast.LENGTH_LONG).show();
}
}
@Override
public void onFailure(Call<Void> call, Throwable t) {
//hideLoadingDialog();
ProximityFeedbackActivity.this.finish();
startThankYouActivity();
Log.e(TAG, "Error in Feedback submission " + t.getMessage());
}
答案 3 :(得分:0)
正如其他人所说的那样
if(response.isSuccessful()){
response.body()
} else{
response.errorBody()
}
是处理错误的正确方法。
在string()
方法中,调用readString
方法
/** Removes all bytes from this, decodes them as {@code charset}, and returns the string. */
String readString(Charset charset) throws IOException;
基于评论response.errorBody().string()
将在您第一次调用时返回错误。连续调用将返回一个空字符串。
即使你没有在你的代码中打电话,但你有一个断点,然后你检查string()
的值,它将是空的。