2016-04-22 2 views
6

когда пользователь по OkHttp библиотеки с асинхронным способом, как это:OkHttp ответа код состояния в методе OnFailure

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

+2

метод onFaliure охватывает только исключение, такое как тайм-аут и т. Д. Если вы хотите получить ошибку ответа, например, 400, вы можете получить код состояния из метода onResponse response.code() –

ответ

4

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

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

    } 
} 

И official doc для onResponse метода:

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

+1

Благодаря @skadoosh для предоставления ссылки на документы. – yennsarah

+0

Спасибо вашему ответу очень много! @Эми – YiFeng

4

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

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

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

0

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

Смежные вопросы