【发布时间】:2014-08-07 04:40:20
【问题描述】:
这是我最近遇到的问题。有时在我使用主页按钮退出应用程序并让它在后台闲置一段时间后,我得到 getActivity() 的空指针。所以我只是想知道我是否设置了异步任务和侦听器错误,或者问题可能出在其他地方。我的一般流程如下:
public class MyAsyncTask extends AsyncTask<Void, Void, List<SomeObject>>{
private Context ctx;
private AsyncListener listener;
public MyAsyncTask(Context ctx){
//set Context, etc
}
...
onPostExecute(List<SomeObject> result){
super.onPostExecute(result);
if(result!=null){
listener.onAvailable(result);
} else {
listener.onUnavailable();
}
}
public interface AsyncListener{
void onAvailable(List<SomeObject> result);
void onUnavailable();
}
public void setAsyncListener(AsyncListener listener){
this.listener = listener;
}
}
片段:
public class MyFragment extends Fragment implements AsyncListener {
private AsyncTask task;
private List<SomeObject> data;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
return inflater.inflate(R.layout.fragment_messages, container, false);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
setViews();
if(data == null) {
task = new AsyncTask(getActivity());
task.setAsyncListener(this);
task.execute();
} else {
setData();
}
}
private void setData(){
someListView.setAdapter(new SomeAdapter(getActivity(), data));
}
@Override
public void onAvailable(List<SomeObject> result){
this.data = result;
setData();
}
@Override
public void onUnavailable(List<SomeObject> result){
//Create toast or alert dialog, etc
}
}
如您所见,我使用侦听器将结果从 asynctask 发布到我的片段。问题是,在设置适配器时,我有时会在 getActivity() 上收到空指针。这只发生在我退出应用程序时,让它在后台停留很长一段时间,然后打开它。也许侦听器在附加片段之前被触发?也许我需要以不同的方式设置我的逻辑?
【问题讨论】:
标签: java android android-fragments android-asynctask