web-dev-qa-db-ja.com

onFailureメソッドのOkHttp応答ステータスコード

次のような非同期の方法で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メソッドで、さまざまなエラーを区別するために応答ステータスコードを取得する方法。たとえば、ネットワークエラーやサーバーエラーなどです。

16
YiFeng

私が覚えている限り、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応答コードを示す場合があります。

10
yennsarah

https://github.com/square/okhttp/issues/1769

上記のリンクによれば、onFailure()は、クライアントに問題があった場合にのみ呼び出されます。

リクエストは正常に配信されたがサーバーに問題があった場合は、response.isSuccessful()を確認できます。 falseが返された場合は、response.code()を確認してエラーを処理してください。

7
mrEvgenX