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