次のような非同期の方法で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メソッドで、さまざまなエラーを区別するために応答ステータスコードを取得する方法。たとえば、ネットワークエラーやサーバーエラーなどです。
私が覚えている限り、onFailure
は応答がないときにトリガーされます。したがって、エラーが発生した場合、onResponseが呼び出されます。 onResponse
で次のようなことができます:
@Override
public void onResponse(Call call, Response response) throws IOException {
switch(response.code()){
//your desired catched codes here.
}
}
そして 公式ドキュメント for onResponse
method:
トランスポート層の成功(HTTP応答コード、ヘッダー、本文の受信)は、必ずしもアプリケーション層の成功を示すわけではないことに注意してください。応答は、404や500などの不幸なHTTP応答コードを示す場合があります。
https://github.com/square/okhttp/issues/1769
上記のリンクによれば、onFailure()
は、クライアントに問題があった場合にのみ呼び出されます。
リクエストは正常に配信されたがサーバーに問題があった場合は、response.isSuccessful()
を確認できます。 falseが返された場合は、response.code()
を確認してエラーを処理してください。