Java 如何知道未知后异常的原因?

Java 如何知道未知后异常的原因?,java,android,exception,unknown-host,Java,Android,Exception,Unknown Host,如果服务器关闭或没有internet连接,则会引发UnknownHostException。我如何确定是因为服务器关闭或没有internet连接而引发了UnknownHostException 原因是我需要通知用户错误的原因。我必须显示这样的内容:“对不起,该服务当前不可用。请稍后再试”或“您没有internet连接”。您可以使用来检查网络状态 ConnectivityManager connectivityManager = (ConnectivityManager) getSystemSer

如果服务器关闭或没有internet连接,则会引发
UnknownHostException
。我如何确定是因为服务器关闭或没有internet连接而引发了
UnknownHostException

原因是我需要通知用户错误的原因。我必须显示这样的内容:“对不起,该服务当前不可用。请稍后再试”或“您没有internet连接”。

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

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

您可以检查网络状态以确定internet连接是否可用(但不是100%可靠):

编辑:

对不起,没有办法肯定地告诉手机的互联网连接已经中断。 但是,除了检查网络状态之外,你还可以做一个简单的测试,比如从互联网上的网站下载一个小页面(选择一些可靠的服务器)


此双重测试的结果应在99%的时间内准确无误。

引发UnKnownHostException以指示无法确定主机的IP地址。 这不是没有internet连接或服务器关闭的情况

还要检查您是否在文件中添加了internet权限

请参考这个

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

如果服务器大部分停机,第一部分将出现连接超时异常

+1。您应该指出
InetAddress.getByName()
method抛出this.Hi。谢谢你的回答。然而,这并不能回答我的问题。我知道抛出UnknownHostException是为了表示无法确定主机的IP地址。但是,原因可能是主机关闭或没有internet连接。有没有办法知道引发异常的原因?UknownHostException太笼统了。像这样检查网络状态并不是检查internet连接可用性的可靠方法。在执行上述验证后,可以立即断开internet连接。我正在寻找一种方法,以了解未知后异常的原因是由于缺少Internet连接,还是仅仅因为主机已关闭。谢谢!目前,我已经在进行上述类似的验证,以检查设备的网络连接。但是,正如预期的那样,它不会检查internet连接的可用性。连接到网站是检查internet连接可用性的唯一方法吗?为了这个目的而连接到像谷歌这样的第三方网站,即使没有他们的同意,这是否合乎道德?或者这真的不需要征求同意吗?我认为像谷歌这样规模的公司不会介意回答你的“ping-like”查询(除非每秒钟有数百个);)我对此的评论与塞巴斯蒂安相同。
//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()