我在AsyncTask
内拨打了fragment
。我在getActivity()
的{{1}}内拨打doInBackground
,但AsyncTask
正在返回getActivity
。
如果我在null
以外的地方致电getActivity
,它的工作正常,但我需要在AsyncTask
内部activity
的实例。
任何帮助将不胜感激.. !!!
答案 0 :(得分:3)
将活动传递给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;
}
}
答案 1 :(得分:2)
两种解决方案都可以正常发布。试试其中任何一个。
解决方案1:
尝试在AsynTask
中呼叫您的onActivityCreated
,而不是onCreateView
,因为有时会发生活动实例返回null
中的onCreateView
。
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
// call AsynTask here, getActivity() not return null here
}
解决方案2:
在activity
附加fragment
后获取Activity
个实例,然后在Activity
中使用context
AsynTask
(无需调用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
答案 2 :(得分:1)
在你的片段中添加
Activity mActivity; //declare as global variable
@Override
public void onAttach(Context context) {
super.onAttach(context);
if (context instanceof Activity){
mActivity=(Activity) context;
}
}
然后在mActivity
中使用getActivity()
代替AsyncTask
。
答案 3 :(得分:-1)
异步任务可能正在进行但片段已关闭,因此您已将getActivty()传递给AsyncTask。