Код состояния ответа OkHttp в методе onFailure

когда я использую библиотеку 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 метод, как я получаю код состояния ответа, чтобы различать различные ошибки. Например, ошибка сети или ошибка сервера ?

3 ответов


насколько я помню, onFailure срабатывает, когда вы не получаете ответа. Таким образом, если вы получите сообщение об ошибке, onResponse будет вызван. Вы можете сделать что-то подобное в onResponse:

@Override
public void onResponse(Call call, Response response) throws IOException {
    switch(response.code()){
    //your desired catched codes here.

   }
}

и официальный док на onResponse способ:

обратите внимание, что успех транспортного уровня (получение кода ответа HTTP, заголовков и тела) не обязательно указывает на успех уровня приложения: ответ может по-прежнему указывать на неудовлетворительный код ответа HTTP, такой как 404 или 500.


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

по ссылке выше, onFailure() вызывается, если, и только если были проблемы с клиентом.

Если запрос был успешно доставлен, но возникла проблема с сервером, вы можете проверить response.isSuccessful(). Если он вернется false, Регистрация response.code() и обработать ошибку.


вы проверяете это, используя response.code() Вы также можете использовать response.message() для получения дополнительной информации.