android - DialogFragment 导致空指针崩溃

标签 android nullpointerexception android-fragments

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

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

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

我的问题是,除了跟踪每个 fragment 和 Activity 是否仍在运行之外,是否有办法避免这种情况?

最佳答案

我以前也遇到过同样的问题。我在某个博客上看到的一个相当好的答案(我忘记了)如下:

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

为了彻底起见,您可能还希望在使用 onRetainNonConfigurationInstance() 保存 AsyncTasks 中的上下文时将其设置为 null。然后在 AsyncTask 中,在尝试使用 Context 执行某些操作之前检查 Context 是否为 null。如果 AsyncTask 尝试在后台使用上下文,这将阻止应用程序崩溃。

关于android - DialogFragment 导致空指针崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11608080/

相关文章:

android - 操作栏出现空指针异常

java - 私有(private)方法上的 Android Fragment NullPointerException

java - 按后退按钮当前片段保留不恢复上一个片段

android - 将回调 onListItemClick 上的数据传递给 fragment

java - facebook sdk 中的 UiLifecycleHelper 类

Java 文件列表 : NPE while using for loop

android - 无法在 okhttp3 Android 中访问 POST 参数

android - 使用 fragment 时应用程序崩溃

android - 将 Alsa 移植到 Android

java - 在 Android 开发中使用 Gradle