Как обращаться с java.net.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(); } 

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

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

RetroFitError – это общее исключение во время выполнения. Как только он попадает в блокирующий блок, вы действительно можете проверить, какая ошибка была фактически выбрана путем модификации. У Retrofit есть метод isNetworkError() который вы, вероятно, ищете. Поэтому вы можете в основном сделать что-то вроде этого:

  methodToDeterminErrorType(RetroFitError error){ if(error.isNetworkType()){ //throw a toast } } 

Надеюсь это поможет.