繁体   English   中英

如何在Android中主动检查互联网连接或检查连接超时?

[英]How to actively check internet connection or to check connection timeout in android?

在我的应用程序中,如果没有互联网连接,我在asynctask方法中的onPostExecute()上得到以下结果

“无法将类型为java.lang.String的值无法转换为JSONArray”。

因此,我需要检查持续的互联网连接。 另外,如果存在连接超时,我需要向用户显示一条消息。

那么,我该如何解决这个问题呢?

PS现在我正在检查以下代码是否没有互联网连接

import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;

public class InternerConnection {
public static boolean isNetworkAvailable(Context context) {
ConnectivityManager connectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager
.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
}

但是如果网络不好,我会收到上面引用的消息。

EDITED

这是我的onPostExecute和doInBackground方法

@Override
protected void onPostExecute(String result) {

try {
// dialog.dismiss();
Log.v("esty", "Restaurent output :" + result);

Restaurants rd = new Restaurants();
JSONObject json = new JSONObject(result);

JSONObject obj = json.getJSONObject("Restaurant");
String ID = obj.getString("Id");

String RestaurantBrandId = obj.getString("RestaurantBrandId");

String RestaurantBrand = obj.getString("RestaurantBrand");

/*.......................... Rest of the JSON parsing
..................................................*/
((RestaurantsDetailsGeneralActivity) activity).Bind(rd);

super.onPostExecute(result);
} catch (Exception ex) {

Log.v("error", "Restaurant detail :" + ex.getMessage());

}
}


@Override
protected String doInBackground(Void... params) {

try {



HttpParams httpParams = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParams,
TIMEOUT_MILLISEC);
HttpConnectionParams.setSoTimeout(httpParams, TIMEOUT_MILLISEC);
HttpParams p = new BasicHttpParams();
HttpClient httpclient = new DefaultHttpClient(p);

String url = "http://89b69f2297434a0eac543944c620faae.cloudapp.net/RestaurantsApi/Details";



List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
nameValuePairs.add(new BasicNameValuePair("restaurantNumber",
AppGlobal.ResturantNumber));


HttpClient httpClient = new DefaultHttpClient();
String paramsString = URLEncodedUtils.format(nameValuePairs,
"UTF-8");
HttpGet httpget = new HttpGet(url + "?" + paramsString);

ResponseHandler<String> responseHandler = new BasicResponseHandler();

String responseBody = httpclient.execute(httpget, responseHandler);

return responseBody;
} catch(ConnectException e){             
  //not getting this exception. Do in background always returns a result.         
       return e.getMessage();
   }catch (SocketTimeoutException ste){
       Log.v("esty", ste.toString());

       return ste.toString();
   }catch (Exception ex) {

return ex.getMessage();
}

}

似乎最好的办法是找出发生连接故障时为什么会收到该特定错误,并修复代码,以便可以正常处理故障。 这可能比尝试监听超时要容易。 您可以在onPostExecute方法中发布一些代码吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM