在片段中调用AsyncTask(FragmentStatePagerAdapter问题)

时间:2015-04-30 11:45:46

标签: java android android-fragments android-asynctask

我知道这个问题已被提出,但我找不到任何解决方案。

这是事情:
- 我有一个Activity,它有三个标签。
- 每个标签都是Fragment
- 使用FragmentSatePagerAdapter来管理整个事情
当我滑到最后一个标签时,我想向服务器发送请求,并在收到ListView的情况下填充Json。听起来很简单。
我有一个扩展AsyncTask的类,我用它来处理对服务器的请求

public class HttpAsyncNotif extends AsyncTask<String, Void, JSONArray>{
    private TabOperations tabOperationsCaller; // This is my fragment

    public HttpAsyncNotif(TabOperations caller){
        this.tabOperationsCaller = caller;
    }

    // Others methods of Asynctask
}

这是我片段的代码(这是最后一个标签)

public class TabOperations extends Fragment {

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        rootView = inflater.inflate(R.layout.fragment_tab_operations, container, false);
        return rootView;
    }

    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        if(isVisibleToUser){
           new HttpAsyncNotif(this).execute(user.getUsername()); // Got the NullPointerException
        }
    }
}

我在片段的生命周期中查看了细节,但我仍然没有解决方案。

我该怎么做?

非常感谢提前!

2 个答案:

答案 0 :(得分:3)

更改

 new HttpAsyncNotif(this).execute(user.getUsername());

 new HttpAsyncNotif(getActivity()).execute(user.getUsername());

使用Context

Fragment中获取getActivity()

还要在user!=null

之前检查user.getUsername()

答案 1 :(得分:1)

问题在于您已通过Context。将代码更改为

 new HttpAsyncNotif(getActivity()).execute(user.getUsername());