2012-04-19 32 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,其中討論了若干想法,以便以任務繼續的方式解決問題。