2011-12-20 17 views
8

Ho un'applicazione Android che si connette a Internet. Sto intrappolando tutti gli scenari possibili per la connessione e noto che quando non ho una connessione Internet, uno UnknownHostException è thrown. Sono un po 'confuso qui dal momento che ottenere uno UnknownHostException significherà che l'applicazione è stata in grado di connettersi a Internet ma non è stata in grado di trovare l'URL specificato.Errore di connessione Internet

Sto ottenendo l'eccezione giusta? Potresti spiegare perché sto ottenendo un UnknownHostException in questo?

Inoltre, si può dire le eccezioni specifiche per questi scenari:

  • Quando non c'è connessione a Internet.
  • Quando non è possibile trovare l'URL.
  • Quando la richiesta è scaduta.
  • Quando il sito Web non funziona.
  • Quando l'accesso è negato.

Vorrei anche apprezzare se potessi darmi più scenari ed eccezioni. Devo intercettare tutte le possibili connessioni e visualizzare il messaggio più appropriato a seconda del tipo di connessione Errore.

+0

buona domanda + 1 –

+0

se si sta cercando di connettersi localhost dal vostro emulatore si deve dare come 10.0.2.2. – sampathpremarathna

risposta

11

ottenere una UnknownHostException significa che l'applicazione era in grado di connettersi a Internet

No, non lo è. Significa che l'applicazione non è stata in grado di risolvere il nome host. Ciò potrebbe essere dovuto al fatto che il nome host non esiste o perché non è stato possibile connettersi a Internet per risolverlo.

Quando non c'è connessione a Internet.

Nessuna specifica eccezione. "Non c'è connessione a Internet" non ha un significato ben definito. La condizione si risolve in una delle altre modalità di errore di seguito.

Quando non è possibile trovare l'URL.

Se il ospite non può essere trovato, UnknownHostException. Se non è possibile trovare la parte di contenuto dell'URL, HTTP 404.

Quando la richiesta è scaduta.

ConnectException con 'connessione scaduta' come il messaggio, o SocketTimeoutException se si tratta di un timeout di lettura.

Quando il sito Web non è disponibile.

ConnectException con 'connessione rifiutata' come messaggio.

Quando l'accesso è negato.

HTTP 403.

+0

Grazie! Quindi non c'è modo di determinare se un'eccezione è dovuta a una mancanza di connessione Internet? – Arci

+0

Ho già risposto. La condizione "mancanza di una connessione Internet" di per sé non ha un significato ben definito, ma si risolve in una delle tre eccezioni che ho elencato quando l'ho detto. – EJP

2

per controllare la connettività internet ....

boolean b_IsConnect = isNetworkAvailable(); 
private boolean isNetworkAvailable() { 
     ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo activeNetworkInfo = connectivityManager 
       .getActiveNetworkInfo(); 
     return activeNetworkInfo != null; 
    } 
4

Verifica della connessione a Internet, Basta provare questa funzione di esempio ....

public static boolean CheckInternet(Context context) 
{ 
    ConnectivityManager connec = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    android.net.NetworkInfo wifi = connec.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 
    android.net.NetworkInfo mobile = connec.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 

    return wifi.isConnected() || mobile.isConnected(); 
} 

Spero che questo aiuto ....

+0

Non è necessario testare 'mobile.isConnected()' due volte, ecc. Tutto ciò può essere ridotto a una riga: 'return wifi.isConnected() || mobile.isConnected() '. – EJP

+0

Grazie! Sto anche pianificando di implementare un metodo di controllo simile se l'eccezione generata non sarà sufficiente per determinare se non vi è alcuna connessione Internet. – Arci

+0

siete i benvenuti. Se vi è utile la mia risposta, allora votatela. – Uttam

1

per controllare il collegamento a internet, utilizzare questa funzione.

public boolean isConnectingToInternet(){ 
    ConnectivityManager connectivity = (ConnectivityManager) _context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     if (connectivity != null) 
     { 
      NetworkInfo[] info = connectivity.getAllNetworkInfo(); 
      if (info != null) 
       for (int i = 0; i < info.length; i++) 
        if (info[i].getState() == NetworkInfo.State.CONNECTED) 
        { 
         return true; 
        } 
     } 
     return false; 
} 
Problemi correlati