检查互联网连接或捕获例外?

时间:2014-01-17 23:17:49

标签: android android-wifi

我知道如何检查网络是打开还是关闭,但我想知道是否只是抓住异常也没关系。

例如,在这段代码中,我尝试进行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权限)

2 个答案:

答案 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;
    }

答案 1 :(得分:0)

在发出请求之前检查连接通常会更好。但是,在某些情况下,您应该尝试发出请求然后处理异常。例如,如果您的HTTP客户端具有缓存层,并且可以从缓存中满足您的GET请求而无需任何网络请求。

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