Uso un oggetto Parcelable per trasportare alcuni dati su un BroadcastReceiver. Ecco cosa devo fare:ClassNotFoundException quando si utilizza la funzione Parcelable personalizzata
Registrazione il mio intento e l'impostazione Parcelable extra su di esso insieme a un ulteriore programma di caricamento classi (intent.setExtraClassLoader (..)). Quindi pianifico l'esecuzione della trasmissione tramite un AlarmManager.
Così, quando AlarmManager si accende, guarda al mio intento con il suo pacco che non può elaborare poiché non usa il classloader fornito (come giunzioni).
Penso che il classloader si perda quando Inten.fillIn copia l'intento su uno nuovo (vedi stack trace).
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)
Quindi c'è un modo per aggirare questo problema? Qualsiasi aiuto sarebbe apprezzato.
Grazie
L'AlarmManager è prevista quando si riceve un'azione BOOT_COMPLETED. Quindi non inizio l'intento nella mia domanda. C'è un modo migliore per gestire la situazione? – Moritz
Oh! Io vedo. Non l'ho notato nella traccia dello stack. Esaurito, sembrerebbe che non si possa usare un oggetto 'Parcelable' con un' PendingIntent', il che puzza. Piuttosto che usare 'Parcelable', potresti aver bisogno di serializzare il tuo oggetto in un altro modo (ad es. In un' Bundle', in un 'String'). – CommonsWare
Sì, il piping dei dati attraverso un oggetto pronto extra è un modo per andare. La cosa strana è che ottengo l'eccezione citata, ma il mio oggetto dati è effettivamente trasferito. Quindi funziona, ma riversa sempre l'eccezione che è confusa e minacciosa. – Moritz