如果服务器宕机或没有网络连接,将抛出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%的准确率。
当主机的IP地址无法确定时,会抛出UnKnownHostException异常。这并不意味着没有网络连接或服务器宕机。
还要检查您是否在清单文件中添加了Internet权限。
请参考此链接
使用以下方法检查互联网连接:
//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()
方法会抛出异常。 - Gray您可以使用ConnectivityManager
来检查网络状态。
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
bool hasConnectivity = connectivityManager.getActiveNetworkInfo().isConnectedOrConnecting();