2011-12-20 193 views
8

我有一個連接到互聯網的Android應用程序。我正在捕獲所有可能的連接情況,並注意到當我沒有Internet連接時,UnknownHostExceptionthrown。我有點困惑,因爲獲得UnknownHostException意味着應用程序能夠連接到Internet但無法找到給定的URL。互聯網連接錯誤

我得到正確的例外嗎?你能解釋爲什麼我在這裏得到UnknownHostException

另外,你能告訴具體的例外這些方案:

  • 當沒有互聯網連接。
  • 找不到URL。
  • 當請求超時。
  • 當網站關閉時。
  • 訪問被拒絕時。

我也很感激它,如果你可以給我更多的場景和例外。我必須捕捉所有可能的連接並根據連接類型錯誤顯示最適合的消息。

+0

問得好+ 1 – 2011-12-20 09:29:40

+0

如果你正試圖從本地主機的仿真器連接,你必須把它作爲10.0.2.2。 – sampathpremarathna 2011-12-20 09:56:35

回答

11

獲取UnknownHostException將意味着應用程序是 能夠連接到互聯網

不,它不。這意味着應用程序無法解析主機名稱。這可能是因爲主機名不存在,或者因爲它無法連接到Internet來解決它。

當沒有互聯網連接。

沒有特別的例外。 「沒有互聯網連接」沒有明確的含義。該條件解決了下面其他故障模式之一。

當無法找到URL時。

如果主機無法找到,UnknownHostException。如果URL的內容部分無法找到,則HTTP 404.

當請求超時時。

ConnectException與「連接超時」的消息,或者SocketTimeoutException如果它是一個讀取超時。

當網站關閉時。

ConnectException以'連接被拒絕'作爲消息。

訪問被拒絕時。

HTTP 403

+0

謝謝!因此,沒有辦法確定是否由於缺乏互聯網連接而導致異常? – Arci 2011-12-20 15:49:27

+0

我已經回答了。 「缺乏互聯網連接」本身並沒有明確的含義,但是當我這樣說時,它解決了我列出的三個例外之一。 – EJP 2013-08-29 05:52:32

2

檢查互聯網連接....

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

檢查Internet連接,就試試這個樣本功能....

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(); 
} 

我希望這幫助....

+0

測試'mobile.isConnected()'兩次沒有意義,等等。所有這些都可以簡化爲一行:'return wifi.isConnected()|| mobile.isConnected()'。 – EJP 2011-12-20 09:57:53

+0

謝謝!如果拋出的異常不足以確定是否沒有互聯網連接,我也計劃實施類似的檢查方法。 – Arci 2011-12-20 15:54:49

+0

你是歡迎。如果你有幫助我的答案,然後投票。 – Uttam 2011-12-21 04:51:14

1

要檢查互聯網連接,使用這個功能。

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; 
}