如何知道UnknownHostException的原因?

时间:2012-04-03 12:26:48

标签: java android exception unknown-host

如果服务器关闭或没有互联网连接,则抛出UnknownHostException。如何确定是否因为服务器已关闭或没有互联网连接而引发UnknownHostException

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

3 个答案:

答案 0 :(得分:4)

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

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

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

编辑:

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

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

答案 1 :(得分:2)

抛出UnKnownHostException以指示无法确定主机的IP地址。 没有互联网连接或服务器停机的情况。

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

请参阅此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()

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

答案 2 :(得分:0)

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

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