2012-04-03 347 views
1

如果服務器關閉或者沒有互聯網連接,則會引發UnknownHostException。如何確定UnknownHostException是因爲服務器關閉還是沒有互聯網連接?如何知道UnknownHostException的原因?

這樣做的原因是我需要通知有關錯誤的原因的用戶。而且我必須展示這樣的內容:「對不起,該服務目前不可用,請稍後再試」或「您沒有互聯網連接」。

回答

2

您可以查看網絡狀態,以確定是否互聯網連接(不是100%可靠雖然):

ConnectivityManager conMgr = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); 

if (conMgr.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED 
    || conMgr.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTING ) { 
... 
} 

編輯:

恕我直言,沒有辦法告訴肯定手機互聯網連接已關閉。 但是,除了檢查網絡狀態之外,您還可以做一個簡單的測試,例如從互聯網上的網站上下載一個小頁面(選擇一些可靠的服務器)。

這種雙重試驗的結果應該是的時間準確99%。

+0

像這樣檢查網絡狀態並不是防止互聯網連接可用的防彈方法。上面的驗證完成後,互聯網連接就可能斷開。我正在尋找一種方法來了解UnknownHostException的原因是由於缺少intenet連接還是僅僅因爲主機關閉。 – Arci 2012-04-09 12:09:44

+0

謝謝!目前,我已經在進行類似的驗證以檢查設備的網絡連接。但是,如預期的那樣,它不檢查互聯網連接的可用性。是否連接到網站,是檢查互聯網連接可用性的唯一方法?爲了這個原因,即使沒有得到他們的同意,是否有道德地聯繫像Google這樣的第三方網站?或者是否真的有必要就此問題徵得同意? – Arci 2012-04-11 04:01:56

+0

我不認爲Google公司的大小會讓你回答你的「ping-like」查詢(除非每秒有幾百個); – 2012-04-11 08:08:19

0

可以使用ConnectivityManager來檢查網絡狀態。

ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
bool hasConnectivity = connectivityManager.getActiveNetworkInfo().isConnectedOrConnecting(); 
+0

我對這個評論是一樣的作爲塞巴斯蒂安。 – Arci 2012-04-09 12:10:45

2

的UnknownHostException被拋出,指示主機的IP地址無法確定。 不是沒有互聯網連接或服務器關閉的情況。

也檢查您是否曾在manifeast文件添加Internet權限。

請參閱本LINK

要檢查互聯網連接使用bwlow方法::

//To check whether network connection is available on device or not 
public boolean checkInternetConnection(Activity _activity) { 
    ConnectivityManager conMgr = (ConnectivityManager) _activity.getSystemService(Context.CONNECTIVITY_SERVICE); 
    if (conMgr.getActiveNetworkInfo() != null 
      && conMgr.getActiveNetworkInfo().isAvailable() 
      && conMgr.getActiveNetworkInfo().isConnected()) 
     return true; 
    else 
     return false; 
}//checkInternetConnection() 

而且如果服務器發生故障大多是你會得到連接超時異常

+0

第一部分爲+1。你應該指出'InetAddress.getByName()'方法拋出。 – Gray 2012-04-03 12:39:16

+0

嗨。感謝你的回答。但是,這並不能回答我的問題。我知道UnknownHostException拋出,表明主機的IP地址無法確定。但是,其原因可能是主機停機或沒有互聯網連接。有沒有辦法知道拋出異常的原因? UknownHostException太籠統。 – Arci 2012-04-09 12:06:29

+0

您的鏈接已損壞。 – Knossos 2014-09-11 08:26:27