2014-05-10 17 views
6

Używam modernizacji do pobierania i publikowania danych z serwera. Jednakże, jeśli mój telefon traci połączenie z Internetem w środku aplikacji potem widzę błąd tak:Jak obsłużyć wyjątek java.net.UnknownHostException podczas korzystania z modernizacji

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) 

chciałbym obsłużyć ten błąd wdziękiem. Chciałbym złapać wyjątek i pokazać komunikat przypominający tostę, np. "Brak połączenia z Internetem".

próbuję kod jak poniżej, ale pojawia się błąd, że: 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(); 
    } 

Odpowiedz

5

myślę, że trzeba mieć wyjątek modernizacji w połowach.

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

RetroFitError to ogólny wyjątek środowiska wykonawczego. Po trafieniu w blok catch możesz sprawdzić, jaki błąd został faktycznie spowodowany przez modernizację. Retrofit ma metodę isNetworkError(), której prawdopodobnie szukasz. więc można w zasadzie zrobić coś takiego:

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

nadzieję, że to pomaga.

+0

Obecnie error.isNetworkType() jest przestarzałe. Po prostu użyj error.getKind() == Kind.NETWORK – pgarriga

Powiązane problemy