2014-01-17 21 views
1

我知道如何检查网络是打开还是关闭,但我不知道是否抓住这个异常也没关系。检查互联网连接或发现异常?

例如,在这段代码中,我试着做一个GET。如果有连接并且服务器正在运行,则该方法返回true。如果没有连接(或服务器关闭,或其他),则会抛出异常并返回false。那么,在这种简单的情况下,是否有必要在GET之前检查连接?

private boolean get(String uri) { 
    boolean success = false; 
    try { 
    HttpGet request = buildGet(uri); 
    HttpResponse response = new DefaultHttpClient().execute(request); 

    if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { 
     HttpEntity entity = response.getEntity(); 
     if (entity != null) { 
      /* DO SOMETHING */ 
      success = true; 
     } 
    } 
    } catch (Exception e) { 
    /* If we get here -> we can't do a GET request */ 
    } 

    return success; 

}

(此外,检查互联网连接,我们需要添加ACCESS_NETWORK_STATE许可)

+1

这是一个不好的方法。可能会抛出异常,这不仅仅是因为网络关闭,而是由于其他原因。例如,'buildGet'中的一些代码可能有一个bug并且抛出'NullPointerException'。这个例外会被你抓住,所以代码变得更难调试 –

+0

你会从消费资源中拯救你的自我,试图连接到网络 –

回答

0
private boolean isNetworkConnected() { 
     ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo ni = cm.getActiveNetworkInfo(); 
     if (ni == null) { 
      // There are no active networks. 
      return false; 
     } else 
      return true; 
    } 
+0

是的,但我没有问这个问题。 –

0

它通常是更好地发出请求之前检查连接。但是,在某些情况下,您应该尝试提出请求并处理异常。一个示例是,如果您的HTTP客户端具有缓存层,并且您的GET请求可能在没有任何网络请求的情况下从缓存中满足。

在任何情况下,如果您要在请求中捕获异常,至少只能捕获IOException,以便您不会意外捕获其他类型的编码错误。