【发布时间】:2014-03-12 15:19:57
【问题描述】:
我试图了解在什么情况下 getActivity() 可以在 onAttach 之后的片段中返回 null。我通常在我的片段内的 onCreate 或 onCreateView 中启动异步任务,但我收到错误报告,表明有时 getActivity() 在异步任务完成时为空。错误报告通过 crashlytics 传入,但无法重现。
异步任务是“阻塞的”——我显示了一个不可关闭的模态进度条。还可以通过调用 setRequestedOrientation 来防止旋转。
我正在使用 v4 支持 Fragment 和 FragmentActivity。片段设置为保留状态。
我错过了什么?是否有其他可能导致片段分离的配置更改?
我尝试暂时启用旋转和 dev 选项以在离开后销毁活动,但仍然无法重现...
这是我的一个片段中的一些相关代码,在这种情况下,它有时会在activity.dismissSpinner 处与 NPE 中断:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
checkIfLoggedIn();
}
public void checkIfLoggedIn() {
LoginActivity activity = (LoginActivity)getActivity();
activity.showSpinner("Connecting, please wait...");
AsyncTask<String, Void, JsonResponse> asyncTask = new AsyncTask<String, Void, JsonResponse>() {
protected JsonResponse doInBackground(String... notused) {
return cmsServer().getCurrentUser(getActivity());
}
protected void onPostExecute(JsonResponse result) {
LoginActivity activity = (LoginActivity)getActivity();
activity.dismissSpinner();
//...more stuff here
}
};
asyncTask.execute();
}
【问题讨论】:
-
你能把你的代码贴在这里清楚地了解情况吗?
标签: android android-fragments android-support-library