AFAIK,, Retrofit 的 onFailure 用于处理无网络连接等错误。
为了处理来自您的服务器的错误响应,错误响应,我的意思是来自服务器的响应带有 4xx 状态码,但带有一些 JSON 响应供客户端处理。
说,你从服务器得到这个错误结构:
{
statusCode: 409,
message: "Email address already registered"
}
此错误将在onResponse(...) 中捕获。为了解决这个问题,创建你的
public class ErrorBean {
private int statusCode;
private String message;
public ErrorBean() {
}
public int status() {
return statusCode;
}
public String message() {
return message;
}
}
创建一个简单的ErrorHandler util:
public class ErrorUtils {
public static ErrorBean parseError(Response<?> response) {
Converter<ResponseBody, ErrorBean> converter =
ServiceGenerator.retrofit()
.responseBodyConverter(ErrorBean.class, new Annotation[0]);
ErrorBean error;
try {
error = converter.convert(response.errorBody());
} catch (IOException e) {
return new ErrorBean();
}
return error;
}
}
最后,
...
call.enqueue(new Callback<SuccessResponse>() {
@Override
public void onResponse(Call<SuccessResponse> call, Response<SuccessResponse> response) {
if (response.isSuccessful()) {
// use response data and do some fancy stuff :)
} else {
// parse the response body …
ErrorBean error = ErrorUtils.parseError(response);
// … and use it to show error information
// … or just log the issue like we’re doing :)
Log.d("error message", error.message());
}
}
@Override
public void onFailure(Call<User> call, Throwable t) {
// there is more than just a failing request (like: no internet connection)
}
});
希望你明白了..!!!