我正在开发在线应用程序. [问题]当互联网停机或不可用时,它给我错误[强制关闭],我试图使用broadCast接收器处理但不满足精确解决方案,寻找更好的解决方案.
public class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(final Context context,final Intent intent) { NetworkInfo info = intent .getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO); if (null != info) { String state = info.getState().toString(); if (state.equalsIgnoreCase("CONNECTED")) { SplashScreen.isWiFiConnected = true; Log.i("isWifiConnected","=================TRUE"); } else { SplashScreen.isWiFiConnected = false; Log.i("isWifiConnected","=================FALSE"); } } } }
谢谢.
解决方法
static String data = null; private static HttpPost httppost; private static HttpParams httpParameters; private static int timeoutConnection = 30000; private static HttpClient httpclient = null; private static HttpResponse response = null; private static int responseCode=0; public static ConnectivityManager mConnectivityManager; public static NetworkInfo mNetworkInfo; public static boolean isNetError=false; /** Post Http data and returns final string and status on network */ public static void postHttp(String Url,Activity mActivity) { try { isNetError=false; mConnectivityManager= (ConnectivityManager) mActivity.getSystemService(Context.CONNECTIVITY_SERVICE); mNetworkInfo = mConnectivityManager.getActiveNetworkInfo(); if (mNetworkInfo != null && mNetworkInfo.isConnectedOrConnecting()) { httppost = new HttpPost(Url); httpParameters = new BasicHttpParams(); HttpConnectionParams.setSoTimeout(httpParameters,timeoutConnection); httpclient = new DefaultHttpClient(httpParameters); List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); nameValuePairs.add(new BasicNameValuePair("text","some Text")); httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs,HTTP.UTF_8)); // Execute HTTP Post Request response = httpclient.execute(httppost); data = EntityUtils.toString(response.getEntity()); } else isNetError=true; } catch (Exception e) { e.printStackTrace(); isNetError=true; } if (responseCode == 200) { isNetError=false; System.out.println("final..." + data); } else isNetError=true; }
在asyntask的doInBackground()中调用此方法,并在onPostExecute()中检查isNetError值,并在添加权限的其他答案中提及< uses-permission android:name =“android.permission.ACCESS_NETWORK_STATE”/>
if(isNetError) //No internet else //do your stuff