2014-05-10 16 views
6

Uso il retrofit per ottenere e inviare dati dal server. Tuttavia, se il mio telefono perde la connessione ad internet nel bel mezzo del app poi vedo errore come questo:Come gestire java.net.UnknownHostException mentre si utilizza il 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) 

Vorrei gestire questo errore con grazia. Vorrei rilevare l'eccezione e mostrare un messaggio di benvenuto come "Nessuna connessione Internet".

sto cercando il codice come questo ma ottengo un errore che: 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(); 
    } 

risposta

5

Credo che è necessario disporre di un'eccezione retrofit delle catture.

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

Il RetroFitError è un'eccezione di runtime generica. Una volta raggiunto il blocco catch, è possibile verificare effettivamente quale tipo di errore è stato effettivamente generato dall'adattamento. Il retrofit ha un metodo isNetworkError() che è quello che stai probabilmente cercando. Quindi, si può sostanzialmente fare qualcosa di simile:

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

Spero che questo aiuti.

+0

Al momento, error.isNetworkType() è deprecato. Basta usare error.getKind() == Kind.NETWORK – pgarriga