2012-04-19 36 views
0

我已经添加了一个选项来为我的android手机应用不同的主题。同时申请我开始一个异步任务。如果我在应用时更改方向,我会收到下面给出的错误。更改我的android手机中的方向时发生错误。

01-01 00:19:25.140: ERROR/AndroidRuntime(3553): FATAL EXCEPTION: main 
01-01 00:19:25.140: ERROR/AndroidRuntime(3553): java.lang.RuntimeException: Unable to resume activity {com.android.settings/com.android.settings.ThemeSettingsActivity}: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=null} to activity {com.android.settings/com.android.settings.ThemeSettingsActivity}: java.lang.NullPointerException 
01-01 00:19:25.140: ERROR/AndroidRuntime(3553):  at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2471) 
01-01 00:19:25.140: ERROR/AndroidRuntime(3553):  at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2499) 
01-01 00:19:25.140: ERROR/AndroidRuntime(3553):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1994) 
01-01 00:19:25.140: ERROR/AndroidRuntime(3553):  at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3375) 
01-01 00:19:25.140: ERROR/AndroidRuntime(3553):  at android.app.ActivityThread.access$700(ActivityThread.java:125) 
01-01 00:19:25.140: ERROR/AndroidRuntime(3553):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1153) 
01-01 00:19:25.140: ERROR/AndroidRuntime(3553):  at android.os.Handler.dispatchMessage(Handler.java:99) 
01-01 00:19:25.140: ERROR/AndroidRuntime(3553):  at android.os.Looper.loop(Looper.java:137) 
01-01 00:19:25.140: ERROR/AndroidRuntime(3553):  at android.app.ActivityThread.main(ActivityThread.java:4368) 
01-01 00:19:25.140: ERROR/AndroidRuntime(3553):  at java.lang.reflect.Method.invokeNative(Native Method) 
01-01 00:19:25.140: ERROR/AndroidRuntime(3553):  at java.lang.reflect.Method.invoke(Method.java:511) 
01-01 00:19:25.140: ERROR/AndroidRuntime(3553):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
01-01 00:19:25.140: ERROR/AndroidRuntime(3553):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
01-01 00:19:25.140: ERROR/AndroidRuntime(3553):  at dalvik.system.NativeStart.main(Native Method) 
01-01 00:19:25.140: ERROR/AndroidRuntime(3553): Caused by: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=null} to activity {com.android.settings/com.android.settings.ThemeSettingsActivity}: java.lang.NullPointerException 
01-01 00:19:25.140: ERROR/AndroidRuntime(3553):  at android.app.ActivityThread.deliverResults(ActivityThread.java:3004) 
01-01 00:19:25.140: ERROR/AndroidRuntime(3553):  at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2458) 
01-01 00:19:25.140: ERROR/AndroidRuntime(3553):  ... 13 more 
01-01 00:19:25.140: ERROR/AndroidRuntime(3553): Caused by: java.lang.NullPointerException 
01-01 00:19:25.140: ERROR/AndroidRuntime(3553):  at com.android.settings.ThemeSettingsActivity.onActivityResult(ThemeSettingsActivity.java:308) 
01-01 00:19:25.140: ERROR/AndroidRuntime(3553):  at android.app.Activity.dispatchActivityResult(Activity.java:4649) 
01-01 00:19:25.140: ERROR/AndroidRuntime(3553):  at android.app.ActivityThread.deliverResults(ActivityThread.java:3000) 
01-01 00:19:25.140: ERROR/AndroidRuntime(3553):  ... 14 more 

我无法找到这个请帮忙的原因。

+0

是你的包'com.android.settings'? – 2012-04-19 06:03:47

+0

是的com.android.settings是我的包 – Kamalone 2012-04-19 06:05:21

回答

2

正如特德所说,你可能会被糟糕的AsyncTask使用咬住。我写了一篇关于AsyncTask陷阱的博客文章。你可能会发现它与你的情况有关。

http://www.shanekirk.com/2012/04/asynctask-missteps/

-Shane

+0

这个问题很好的介绍,它比阅读谷歌小组讨论更容易。我在您的博客上留下了关于仍然存在问题的评论。 – 2012-04-19 21:54:05

+0

感谢您的博客。我还有一个问题。如果用户在应用主题时按下主页按钮,则图标不会改变。我在做的是,在我的异步任务中,我将主题资源(图标)存储到数据库中,并通过从onPostExecute()发送自定义意图来刷新手机,以便刷新图标。但是用户会中断异步任务,然后就不会发生。有什么办法可以解决这个问题吗? – Kamalone 2012-04-20 05:59:36

5

这将有助于看到您的代码,特别是ThemeSettingsActivity.java的onActivityResult方法,包括线308

然而,有一个在的AsyncTask的设计,可能考虑到这一点的弱点。当你改变方向时,你的活动被破坏并重新创建。然而,AsyncTask(特别是如果它是活动的内部类)仍然与被销毁的活动进行交互。 Android文档建议在活动被销毁时保存任务状态并销毁任务,然后在重新创建活动时从保存状态构建新任务。请参阅Google网上论坛上的this discussion thread,其中讨论了若干想法,以便以任务继续的方式解决问题。