我有一种方法可以每 15 秒测试一次 Internet 连接。如果设备有互联网连接,则不需要任何东西,但如果您没有互联网连接,我想打电话给 Fragment。崩溃。如果我不能从 AsyncTask 中调用片段,我可以从 MainActivity 调用它。我不知道怎么做。
检查InternetAsyncTask.class
public class CheckInternetAsyncTask extends AsyncTask<Void, Integer, Boolean> {
private MainActivity activity;
private Context context;
public CheckInternetAsyncTask(Context context) {
this.context = context;
}
@Override
protected Boolean doInBackground(Void... params) {
ConnectivityManager cm =
(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
assert cm != null;
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isConnected = activeNetwork != null &&
activeNetwork.isConnected();
if (isConnected) {
try {
InetAddress ipAddr = InetAddress.getByName("google.com");
//You can replace it with your name
return !ipAddr.equals("");
} catch (Exception e) {
Log.e("TAG", "Error checking internet connection"+ e.getMessage());
return false;
}
} else {
//Log.d("TAG", "No network available!");
return false;
}
}
@Override
protected void onPostExecute(Boolean result) {
super.onPostExecute(result);
//Log.d("TAG", "result" + result);
if(result){
// do ur code
Toast.makeText(context,"Device is connected to internet.", Toast.LENGTH_LONG).show();
}
else {
Toast.makeText(context,"Device is not connected to internet!",Toast.LENGTH_LONG).show();
EthernetControlFragment ethernetControlFragment = EthernetControlFragment.newInstance();
ethernetControlFragment.show(activity.getSupportFragmentManager(), "ethernet");
ethernetControlFragment.setCancelable(false);
}
}
}
主要活动
Handler handler = new Handler();
Runnable runnable;
int delay = 15*1000;
@Override
protected void onResume() {
handler.postDelayed( runnable = new Runnable() {
public void run() {
//do something
new CheckInternetAsyncTask(getApplicationContext()).execute();
handler.postDelayed(runnable, delay);
}
}, delay);
super.onResume();
}
@Override
protected void onPause() {
handler.removeCallbacks(runnable);
super.onPause();
}
逻辑猫
java.lang.NullPointerException: Attempt to invoke virtual method 'androidx.fragment.app.FragmentManager com.maksu.falamania.MainActivity.getSupportFragmentManager()' on a null object reference
at com.maksu.falamania.CheckInternetAsyncTask.onPostExecute(CheckInternetAsyncTask.java:63)
at com.maksu.falamania.CheckInternetAsyncTask.onPostExecute(CheckInternetAsyncTask.java:14)
at android.os.AsyncTask.finish(AsyncTask.java:632)
at android.os.AsyncTask.access$600(AsyncTask.java:177)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:5832)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)
你永远不会activity
为你的异步任务设置属性。
你 AsyncTask 的构造函数应该是:
public CheckInternetAsyncTask(Activity activity) {
this.context = activity.getApplicationContext();
this.activity = activity;
}
并调用您的任务,如:
new CheckInternetAsyncTask(MainActivity.this).execute();
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句