Java 如何在AsyncTask中调用片段?

Java 如何在AsyncTask中调用片段?,java,android,fragment,Java,Android,Fragment,我有办法每15秒测试一次互联网连接。如果设备具有internet连接,则不需要任何东西,但是如果您没有internet连接,我想调用Fragment。撞车。如果我不能从AsyncTask中调用片段,我可以从MainActivity调用它。我不知道怎么做 检查InternetAsyncTask.class public class CheckInternetAsyncTask extends AsyncTask<Void, Integer, Boolean> { private Ma

我有办法每15秒测试一次互联网连接。如果设备具有internet连接,则不需要任何东西,但是如果您没有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);
        }

    }
}
LOGCAT

 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的构造函数应该是:

公共检查InternetAsyncTask(活动){
this.context=activity.getApplicationContext();
这个。活动=活动;
}
将您的任务称为:

newcheckInternetAsyncTask(MainActivity.this).execute();

在Giorgos代码的基础上,尝试以下小改动:

    public CheckInternetAsyncTask(AppCompatActivity activity) {
        this.context = activity.getApplicationContext();
        this.activity = activity;
    }

您没有在构造函数中初始化活动,您的活动为空。此问题与您的?哪个问题?ethernetControlFragment.show(activity.getSupportFragmentManager(),“ethernet”)之间有什么区别;无法解析方法“getSupportFragmentManager()”
    public CheckInternetAsyncTask(AppCompatActivity activity) {
        this.context = activity.getApplicationContext();
        this.activity = activity;
    }