如何在 AsyncTask 中调用片段?

穆拉特阿克苏

我有一种方法可以每 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章