Fragment getActivity 总是从 Async Task 返回 null
Fragment getActivity is always returning null from Async Task
我在 fragment
中调用了一个 AsyncTask
。我从那个 AsyncTask
的 doInBackground
中调用 getActivity()
,但是 getActivity
正在返回 null
。
如果我从 AsyncTask
外部调用 getActivity
它工作正常,但我需要 asyncTask
本身内部的 activity
实例。
任何帮助将不胜感激..!!!
在您的片段中添加
Activity mActivity; //declare as global variable
@Override
public void onAttach(Context context) {
super.onAttach(context);
if (context instanceof Activity){
mActivity=(Activity) context;
}
}
然后在 AsyncTask
中使用 mActivity
而不是 getActivity()
。
异步任务可能正在进行但片段已关闭,因此您已将 getActivty() 传递给 AsyncTask。
将Activity传递给AsyncTask方法
new Demo().execute(getActivity());
public class Demo extends AsyncTask<Activity,Void,Void>{
Activity activity=null;
@Override
protected Void doInBackground(Activity... params) {
activity=params[0]; //get the activity instance
//Do your task
return null;
}
}
我发布的两种解决方案都有效。尝试其中任何一个。
解决方案一:
尝试在 onActivityCreated
中调用您的 AsynTask
而不是在 onCreateView
中调用,因为有时 Activity 实例 return 是 null
在 onCreateView
.
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
// call AsynTask here, getActivity() not return null here
}
方案二:
当 fragment
附加到 Activity
时获取 activity
实例,然后在 AsynTask
中使用 Activity
context
(不需要调用 getActivity()).
private Activity mContext;
// called for API equal or above 23
@Override
public void onAttach(Context context) {
super.onAttach(context);
this.mContext = (Activity) context;
}
/*
* Deprecated on API 23
*/
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
this.mContext = activity;
}
// Use mContext in asyntask
我在 fragment
中调用了一个 AsyncTask
。我从那个 AsyncTask
的 doInBackground
中调用 getActivity()
,但是 getActivity
正在返回 null
。
如果我从 AsyncTask
外部调用 getActivity
它工作正常,但我需要 asyncTask
本身内部的 activity
实例。
任何帮助将不胜感激..!!!
在您的片段中添加
Activity mActivity; //declare as global variable
@Override
public void onAttach(Context context) {
super.onAttach(context);
if (context instanceof Activity){
mActivity=(Activity) context;
}
}
然后在 AsyncTask
中使用 mActivity
而不是 getActivity()
。
异步任务可能正在进行但片段已关闭,因此您已将 getActivty() 传递给 AsyncTask。
将Activity传递给AsyncTask方法
new Demo().execute(getActivity());
public class Demo extends AsyncTask<Activity,Void,Void>{
Activity activity=null;
@Override
protected Void doInBackground(Activity... params) {
activity=params[0]; //get the activity instance
//Do your task
return null;
}
}
我发布的两种解决方案都有效。尝试其中任何一个。
解决方案一:
尝试在 onActivityCreated
中调用您的 AsynTask
而不是在 onCreateView
中调用,因为有时 Activity 实例 return 是 null
在 onCreateView
.
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
// call AsynTask here, getActivity() not return null here
}
方案二:
当 fragment
附加到 Activity
时获取 activity
实例,然后在 AsynTask
中使用 Activity
context
(不需要调用 getActivity()).
private Activity mContext;
// called for API equal or above 23
@Override
public void onAttach(Context context) {
super.onAttach(context);
this.mContext = (Activity) context;
}
/*
* Deprecated on API 23
*/
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
this.mContext = activity;
}
// Use mContext in asyntask