DialogFragment导致nullpointer崩溃

时间:2012-07-23 07:27:55

标签: android nullpointerexception android-fragments

在我的应用程序中,我有几个AsyncTasks在做http请求。 如果任务失败,我会向用户显示DialogFragment。

ErrorDialogFragment newFragment = ErrorDialogFragment.newInstance(R.string.dialog_message_error);
newFragment.show(getFragmentManager(), ConstantHandler.DIALOG_ERROR);

问题是用户有时在AsyncTask完成之前退出Activity或Application,导致getFragmentManager出现空指针异常。

我的问题是,是否有办法避免这种情况,除非跟踪每个片段和活动是否仍在运行?

1 个答案:

答案 0 :(得分:3)

我之前遇到过同样的问题。我在博客上看到的一个相当不错的答案(我已经忘记了)如下:

为AsyncTasks提供对当前上下文的引用。当您的应用最小化/轮换时,请使用onRetainNonConfigurationInstance()getLastNonConfigurationInstance()保存AsyncTasks。然后,当您的应用重新启动时,在onCreate()中,您可以检查是否存在从getLastNonConfigurationInstance()传回的AsyncTask。如果有,请将其上下文设置为您的活动的新上下文。现在,您的AsyncTask将能够访问新的Context并完成其任务。

要彻底,您可能还希望在使用null保存之前,在AsyncTasks中将上下文设置为onRetainNonConfigurationInstance()。然后在AsyncTask中,在尝试使用它之前检查Context是否为null。如果AsyncTask在后台尝试使用上下文,这将停止应用程序崩溃。

相关问题