我使用自定義Parcelable將一些數據攜帶到BroadcastReceiver。這是我做的:使用自定義Parcelable時發生ClassNotFoundException
我註冊了我的意圖,並設置了額外的Parcelable以及一個額外的類加載器(intent.setExtraClassLoader(..))。接下來,我通過AlarmManager安排廣播的執行。
因此,當AlarmManager觸發它時,它會查看我的包裹,因爲它不使用提供的類加載器(因爲它接縫)而無法處理它。
當Inten.fillIn將意圖複製到新的類時,我認爲類加載器會丟失(請參閱堆棧跟蹤)。
02-21 21:09:25.214: WARN/Intent(52): android.os.BadParcelableException: ClassNotFoundException when unmarshalling: com.company.project.MyParcelable
02-21 21:09:25.214: WARN/Intent(52): at android.os.Parcel.readParcelable(Parcel.java:1822)
02-21 21:09:25.214: WARN/Intent(52): at android.os.Parcel.readValue(Parcel.java:1713)
02-21 21:09:25.214: WARN/Intent(52): at android.os.Parcel.readMapInternal(Parcel.java:1947)
02-21 21:09:25.214: WARN/Intent(52): at android.os.Bundle.unparcel(Bundle.java:169)
02-21 21:09:25.214: WARN/Intent(52): at android.os.Bundle.putAll(Bundle.java:242)
02-21 21:09:25.214: WARN/Intent(52): at android.content.Intent.fillIn(Intent.java:4530)
02-21 21:09:25.214: WARN/Intent(52): at com.android.server.am.PendingIntentRecord.send(PendingIntentRecord.java:185)
02-21 21:09:25.214: WARN/Intent(52): at android.app.PendingIntent.send(PendingIntent.java:400)
02-21 21:09:25.214: WARN/Intent(52): at com.android.server.AlarmManagerService$AlarmThread.run(AlarmManagerService.java:636)
那麼圍繞這個問題有什麼辦法嗎?任何幫助,將不勝感激。
感謝
的AlarmManager當接收到一個BOOT_COMPLETED行動計劃。所以我不會在我的應用程序中啓動這個意圖。 有沒有更好的方法來處理這種情況? – Moritz 2010-02-22 20:06:05
哦!我懂了。我沒有注意到在堆棧跟蹤中。關閉袖口,看起來你不能使用具有PendingIntent的自定義'Parcelable',這有點臭。您可能需要以其他方式序列化您的對象(例如,「Bundle」到「String」),而不是使用「Parcelable」。 – CommonsWare 2010-02-22 20:16:52
是通過一個額外準備好的對象管道數據是一種方式。奇怪的是,我得到了提到的異常,但我的數據對象實際上被轉移。所以它確實有效,但是總是讓這個例外感到困惑和威脅。 – Moritz 2010-02-22 23:06:27