Код состояния ответа 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() для получения дополнительной информации.