4

如果UnknownHostException服务器关闭或没有 Internet 连接,则会抛出一个。如何确定是否UnknownHostException因为服务器关闭或没有互联网连接而抛出?

原因是我需要通知用户错误的原因。我必须显示类似“抱歉。该服务目前不可用。请稍后再试”或“您没有互联网连接”之类的内容。

4

3 回答 3

4

您可以检查网络状态以确定互联网连接是否可用(虽然不是 100% 可靠):

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

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

编辑 :

恕我直言,无法确定电话互联网连接已关闭。但是除了检查网络状态之外,您还可以做一个简单的测试,例如从 Internet 上的网站下载一个小页面(选择一些可靠的服务器)。

这种双重测试的结果应该在 99% 的时间内是准确的。

于 2012-04-03T12:30:42.547 回答
2

抛出 UnKnownHostException 表示无法确定主机的 IP 地址。这不是没有互联网连接或服务器关闭的情况。

还要检查您是否在清单文件中添加了互联网权限。

请参考此链接

要检查互联网连接,请使用 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()

如果服务器大部分关闭,您将获得连接超时异常

于 2012-04-03T12:33:29.740 回答
0

您可以使用ConnectivityManager来检查网络状态。

ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
bool hasConnectivity = connectivityManager.getActiveNetworkInfo().isConnectedOrConnecting();
于 2012-04-03T12:29:33.987 回答