如果服務器關閉或者沒有互聯網連接,則會引發UnknownHostException
。如何確定UnknownHostException
是因爲服務器關閉還是沒有互聯網連接?如何知道UnknownHostException的原因?
這樣做的原因是我需要通知有關錯誤的原因的用戶。而且我必須展示這樣的內容:「對不起,該服務目前不可用,請稍後再試」或「您沒有互聯網連接」。
如果服務器關閉或者沒有互聯網連接,則會引發UnknownHostException
。如何確定UnknownHostException
是因爲服務器關閉還是沒有互聯網連接?如何知道UnknownHostException的原因?
這樣做的原因是我需要通知有關錯誤的原因的用戶。而且我必須展示這樣的內容:「對不起,該服務目前不可用,請稍後再試」或「您沒有互聯網連接」。
您可以查看網絡狀態,以確定是否互聯網連接(不是100%可靠雖然):
ConnectivityManager conMgr = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
if (conMgr.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED
|| conMgr.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTING ) {
...
}
編輯:
恕我直言,沒有辦法告訴肯定手機互聯網連接已關閉。 但是,除了檢查網絡狀態之外,您還可以做一個簡單的測試,例如從互聯網上的網站上下載一個小頁面(選擇一些可靠的服務器)。
這種雙重試驗的結果應該是的時間準確99%。
可以使用ConnectivityManager
來檢查網絡狀態。
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
bool hasConnectivity = connectivityManager.getActiveNetworkInfo().isConnectedOrConnecting();
我對這個評論是一樣的作爲塞巴斯蒂安。 – Arci 2012-04-09 12:10:45
的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()
而且如果服務器發生故障大多是你會得到連接超時異常
像這樣檢查網絡狀態並不是防止互聯網連接可用的防彈方法。上面的驗證完成後,互聯網連接就可能斷開。我正在尋找一種方法來了解UnknownHostException的原因是由於缺少intenet連接還是僅僅因爲主機關閉。 – Arci 2012-04-09 12:09:44
謝謝!目前,我已經在進行類似的驗證以檢查設備的網絡連接。但是,如預期的那樣,它不檢查互聯網連接的可用性。是否連接到網站,是檢查互聯網連接可用性的唯一方法?爲了這個原因,即使沒有得到他們的同意,是否有道德地聯繫像Google這樣的第三方網站?或者是否真的有必要就此問題徵得同意? – Arci 2012-04-11 04:01:56
我不認爲Google公司的大小會讓你回答你的「ping-like」查詢(除非每秒有幾百個); – 2012-04-11 08:08:19