片段getActivity始终从Async Task返回null

时间:2017-03-17 05:54:55

标签: android android-asynctask facebook-android-sdk

我在AsyncTask内拨打了fragment。我在getActivity()的{​​{1}}内拨打doInBackground,但AsyncTask正在返回getActivity

如果我在null以外的地方致电getActivity,它的工作正常,但我需要在AsyncTask内部activity的实例。

任何帮助将不胜感激.. !!!

4 个答案:

答案 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。