2011-12-20 194 views
8

我有一个连接到互联网的Android应用程序。我正在捕获所有可能的连接情况,并注意到当我没有Internet连接时,UnknownHostExceptionthrown。我有点困惑,因为获得UnknownHostException意味着应用程序能够连接到Internet但无法找到给定的URL。互联网连接错误

我得到正确的例外吗?你能解释为什么我在这里得到UnknownHostException

另外,你能告诉具体的例外这些方案:

  • 当没有互联网连接。
  • 找不到URL。
  • 当请求超时。
  • 当网站关闭时。
  • 访问被拒绝时。

我也很感激它,如果你可以给我更多的场景和例外。我必须捕捉所有可能的连接并根据连接类型错误显示最适合的消息。

+0

问得好+ 1 – 2011-12-20 09:29:40

+0

如果你正试图从本地主机的仿真器连接,你必须把它作为10.0.2.2。 – sampathpremarathna 2011-12-20 09:56:35

回答

11

获取UnknownHostException将意味着应用程序是 能够连接到互联网

不,它不。这意味着应用程序无法解析主机名称。这可能是因为主机名不存在,或者因为它无法连接到Internet来解决它。

当没有互联网连接。

没有特别的例外。 “没有互联网连接”没有明确的含义。该条件解决了下面其他故障模式之一。

当无法找到URL时。

如果主机无法找到,UnknownHostException。如果URL的内容部分无法找到,则HTTP 404.

当请求超时时。

ConnectException与“连接超时”的消息,或者SocketTimeoutException如果它是一个读取超时。

当网站关闭时。

ConnectException以'连接被拒绝'作为消息。

访问被拒绝时。

HTTP 403

+0

谢谢!因此,没有办法确定是否由于缺乏互联网连接而导致异常? – Arci 2011-12-20 15:49:27

+0

我已经回答了。 “缺乏互联网连接”本身并没有明确的含义,但是当我这样说时,它解决了我列出的三个例外之一。 – EJP 2013-08-29 05:52:32

2

检查互联网连接....

boolean b_IsConnect = isNetworkAvailable(); 
private boolean isNetworkAvailable() { 
     ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo activeNetworkInfo = connectivityManager 
       .getActiveNetworkInfo(); 
     return activeNetworkInfo != null; 
    } 
4

检查Internet连接,就试试这个样本功能....

public static boolean CheckInternet(Context context) 
{ 
    ConnectivityManager connec = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    android.net.NetworkInfo wifi = connec.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 
    android.net.NetworkInfo mobile = connec.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 

    return wifi.isConnected() || mobile.isConnected(); 
} 

我希望这帮助....

+0

测试'mobile.isConnected()'两次没有意义,等等。所有这些都可以简化为一行:'return wifi.isConnected()|| mobile.isConnected()'。 – EJP 2011-12-20 09:57:53

+0

谢谢!如果抛出的异常不足以确定是否没有互联网连接,我也计划实施类似的检查方法。 – Arci 2011-12-20 15:54:49

+0

你是欢迎。如果你有帮助我的答案,然后投票。 – Uttam 2011-12-21 04:51:14

1

要检查互联网连接,使用这个功能。

public boolean isConnectingToInternet(){ 
    ConnectivityManager connectivity = (ConnectivityManager) _context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     if (connectivity != null) 
     { 
      NetworkInfo[] info = connectivity.getAllNetworkInfo(); 
      if (info != null) 
       for (int i = 0; i < info.length; i++) 
        if (info[i].getState() == NetworkInfo.State.CONNECTED) 
        { 
         return true; 
        } 
     } 
     return false; 
}