【发布时间】:2012-04-03 12:26:48
【问题描述】:
如果服务器关闭或没有互联网连接,则会抛出 UnknownHostException。如何判断UnknownHostException是因为服务器宕机还是没有网络连接而被抛出?
原因是我需要通知用户错误的原因。我必须显示类似“抱歉。该服务目前不可用。请稍后再试”或“您没有互联网连接”。
【问题讨论】:
标签: java android exception unknown-host
如果服务器关闭或没有互联网连接,则会抛出 UnknownHostException。如何判断UnknownHostException是因为服务器宕机还是没有网络连接而被抛出?
原因是我需要通知用户错误的原因。我必须显示类似“抱歉。该服务目前不可用。请稍后再试”或“您没有互联网连接”。
【问题讨论】:
标签: java android exception unknown-host
您可以检查网络状态以确定互联网连接是否可用(虽然不是 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% 的情况下都是准确的。
【讨论】:
抛出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()
如果服务器大部分都关闭了,你会得到连接超时异常
【讨论】:
InetAddress.getByName() 方法会抛出该问题。
您可以使用ConnectivityManager 来检查网络状态。
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
bool hasConnectivity = connectivityManager.getActiveNetworkInfo().isConnectedOrConnecting();
【讨论】: