Java 如何在AsyncTask中调用片段?
我有办法每15秒测试一次互联网连接。如果设备具有internet连接,则不需要任何东西,但是如果您没有internet连接,我想调用Fragment。撞车。如果我不能从AsyncTask中调用片段,我可以从MainActivity调用它。我不知道怎么做 检查InternetAsyncTask.classJava 如何在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
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;
}