当我使用这样的异步方式使用OkHttp库时:
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
e.printStackTrace();
}
@Override
public void onResponse(Call call, Response response) throws IOException {
}
});
在 onFailure 方法中,我如何获取响应状态代码以区分不同的错误。例如,网络错误或服务器错误?
答案 0 :(得分:9)
据我记忆,当你没有得到回应时,onFailure
会被触发。因此,如果您收到错误,将调用onResponse。您可以在onResponse
中执行以下操作:
@Override
public void onResponse(Call call, Response response) throws IOException {
switch(response.code()){
//your desired catched codes here.
}
}
onResponse
方法的official doc:
请注意,传输层成功(接收HTTP响应代码,标头和正文)并不一定表示应用层成功:响应可能仍指示不满意的HTTP响应代码,如404或500.
答案 1 :(得分:7)
https://github.com/square/okhttp/issues/1769
根据上面的链接,当且仅当客户端出现问题时才会调用onFailure()
。
如果请求已成功发送但服务器出现问题,您可以检查response.isSuccessful()
。如果它返回 false ,请检查response.code()
并处理错误。
答案 2 :(得分:-2)
您使用userReducer
检查
您还可以使用response.code()
获取更多信息。