Ich muss einige Daten an eine Activity
senden, die in anderem Kontext ausgeführt werden kann. Dafür habe ich eine Klasse say A erstellt, die eine ArrayList
des Datentyps sagt B als eines der Instanz Mitglied hat. Ich habe die Klasse B als Klasse der Klasse A erklärt. Um diese Instanz der Klasse A durch Intent
zu senden, machte ich Klasse A und B beide Parcelable
.Verschachtelte Parzellierung: RuntimeException - Unmarshalling unbekannter Typencode 3211319 bei Offset 440
Klassenstruktur ist so etwas wie diese (nicht das vollständige Code zum Beispiel Code enthält geschrieben, um die Klassen Parcelable
zu machen):
public class A implements Parcelable{
public class B implements Parcelable{
public ArrayList<String> value;
....
....
public void writeToParcel(Parcel dest, int flags) {
dest.writeList(value);
}
....
....
}
public List<B> group;
public String name;
....
....
public void writeToParcel(Parcel dest, int flags) {
dest.writeList(group);
dest.writeString(name);
}
....
....
}
Ich benutzen die putExtra (String name, Parcelable value)
Funktionsdaten zu setzen.
Aber auf der Empfangsseite, bekam ich die folgende Ausnahme:
Uncaught handler: thread main exiting due to uncaught exception
E/AndroidRuntime(1087): 1289817569622 java.lang.RuntimeException: Error receiving broadcast Intent { act=android.intent.action.SET_VOIP_SUPP_SERVICE_REQUEST_LOCAL (has extras) } in [email protected]
E/AndroidRuntime(1087): at android.app.ActivityThread$PackageInfo$ReceiverDispatcher$Args.run(ActivityThread.java:765)
E/AndroidRuntime(1087): at android.os.Handler.handleCallback(Handler.java:587)
E/AndroidRuntime(1087): at android.os.Handler.dispatchMessage(Handler.java:92)
E/AndroidRuntime(1087): at android.os.Looper.loop(Looper.java:123)
E/AndroidRuntime(1087): at android.app.ActivityThread.main(ActivityThread.java:4363)
E/AndroidRuntime(1087): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(1087): at java.lang.reflect.Method.invoke(Method.java:521)
E/AndroidRuntime(1087): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
E/AndroidRuntime(1087): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
E/AndroidRuntime(1087): at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(1087): Caused by: java.lang.RuntimeException: Parcel [email protected]: Unmarshalling unknown type code 3211319 at offset 440
E/AndroidRuntime(1087): at android.os.Parcel.readValue(Parcel.java:1777)
E/AndroidRuntime(1087): at android.os.Parcel.readListInternal(Parcel.java:1956)
E/AndroidRuntime(1087): at android.os.Parcel.readList(Parcel.java:1302)
E/AndroidRuntime(1087): at com.hsc.example.android.MyApp.A.<init>(A.java:61)
E/AndroidRuntime(1087): at com.hsc.example.android.MyApp.A.<init>(A.java:57)
E/AndroidRuntime(1087): at com.hsc.example.android.MyApp.A$1.createFromParcel(A.java:67)
E/AndroidRuntime(1087): at com.hsc.example.android.MyApp.A$1.createFromParcel(A.java:1)
E/AndroidRuntime(1087): at android.os.Parcel.readParcelable(Parcel.java:1845)
E/AndroidRuntime(1087): at android.os.Parcel.readValue(Parcel.java:1713)
E/AndroidRuntime(1087): at android.os.Parcel.readMapInternal(Parcel.java:1947)
E/AndroidRuntime(1087): at android.os.Bundle.unparcel(Bundle.java:169)
E/AndroidRuntime(1087): at android.os.Bundle.getParcelable(Bundle.java:1037)
E/AndroidRuntime(1087): at android.content.Intent.getParcelableExtra(Intent.java:3269)
E/AndroidRuntime(1087): at com.hsc.example.android.MyApp.MyAppActuvity$1.onReceive(MyAppActuvity.java:219)
E/AndroidRuntime(1087): at android.app.ActivityThread$PackageInfo$ReceiverDispatcher$Args.run(ActivityThread.java:754)
E/AndroidRuntime(1087): ... 9 more
Dann zog ich die Klasse B, außerhalb der Klasse A (Wie ich dachte, das Problem der inneren Klasse sein kann, und erklärte die CREATOR Diese statische Deklaration war nicht vorhanden, wenn Klasse B eine innere Klasse der Klasse A war). Aber es hat nicht geholfen.
Dies scheint, dass dieses Problem auf geschachteltes Parceling zurückzuführen ist.
Irgendwelche Vorschläge ??
HINWEIS: wenn ich Funktion der Bundle-Klasse verwendet, und entordnet es dann mit android.os.Bundle.getParcelable(String key)
dann fein alles ist. Es scheint also, dass das Problem nur in Bezug auf Intents besteht.
Haben Sie jemals eine Lösung für dieses Problem finden? Ich muss mich anscheinend mit einem ähnlichen Szenario auseinandersetzen. – Ita