Как обращаться с java.сеть.UnknownHostException при использовании дооснащения

Я использую retrofit для получения и публикации данных с сервера. Однако, если мой телефон теряет подключение к интернету в середине приложения, то я вижу ошибку, как это:

05-10 08:12:05.559  29369-29400/? D/Retrofit﹕ java.net.UnknownHostException: Unable to resolve host "my.server.com": No address associated with hostname
            at java.net.InetAddress.lookupHostByName(InetAddress.java:394)
            at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
            at java.net.InetAddress.getAllByName(InetAddress.java:214)

Я хотел бы обработать эту ошибку изящно. Я хотел бы поймать исключение и показать сообщение тоста, как "нет подключения к интернету".

Я пытаюсь код, как это, но я получаю сообщение об ошибке:java.net.UnknownHostException is never thrown in the try block

  try {
      isTokenValid = MyManager.INSTANCE.getService().validate();
  }
  catch (RetrofitError cause) {
      Response r = cause.getResponse();

      if (r != null && r.getStatus() == 403) {
           isTokenValid = false;
      }
  }
  catch (UnknownHostException exception) {
      Toast.makeText(getBaseContext(), "No internet connection", Toast.LENGTH_SHORT).show();
  }

1 ответов


Я думаю, вам нужно иметь модифицированное исключение в улове.

catch (RetrofitError error) {
    methodToDeterminErrorType(error);
}

на RetroFitError является общим исключением времени выполнения. Как только он попадает в блок catch, вы можете проверить, какая ошибка была фактически вызвана retrofit. Retrofit имеет метод isNetworkError() что вы, вероятно, ищет. Так что вы можете в основном сделать что-то вроде этого:

methodToDetermineErrorType(RetroFitError error) {
if (error.isNetworkType()) {
    // show a toast
   }
}

надеюсь, что это помогает.