我知道如何检查网络是打开还是关闭,但我想知道是否只是抓住异常也没关系。
例如,在这段代码中,我尝试进行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
权限)
答案 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,以免意外捕获其他类型的编码错误。