Ich habe eine Activity
, in der ich eine private Klasse Data habe.
In der Methode onSaveInstanceState
versuche ich, eine Instanz von Data
zu speichern.
Das ist meine ganze Aktivität:
Wenn ich jetzt die Ausrichtung des Geräts ändere, wird das Data
-Objekt gespeichert und wie es sollte gelesen. Wenn ich jedoch die Home-Taste drücke, stürzt die App mit folgendem in der Logcat ab:
05-10 20: 05: 51.895: E / AndroidRuntime (30317): FATALE AUSNAHME: Haupt 05-10 20: 05: 51.895: E / AndroidRuntime (30317): java.lang.RuntimeException: Parcelable hat IOException-Schreiben festgestellt serialisierbares Objekt (name = com.rigidbits.test.TestActivity $ Data) 05-10 20: 05: 51.895: E / AndroidRuntime (30317): um android.os.Parcel.writeSerializable (Parcel.java:1176) 05-10 20: 05: 51.895: E / AndroidRuntime (30317): um android.os.Parcel.writeValue (Parcel.java:1130) 05-10 20: 05: 51.895: E / AndroidRuntime (30317): um android.os.Parcel.writeMapInternal (Parcel.java:488) 05-10 20: 05: 51.895: E / AndroidRuntime (30317): um android.os.Bundle.writeToParcel (Bundle.java:1552) 05-10 20: 05: 51.895: E / AndroidRuntime (30317): um android.os.Parcel.writeBundle (Paket.java:502) 05-10 20: 05: 51.895: E / AndroidRuntime (30317): um android.app.ActivityManagerProxy.activityPaused (ActivityManagerNative.java:1615) 05-10 20: 05: 51.895: E / AndroidRuntime (30317): um android.app.ActivityThread.handlePauseActivity (ActivityThread.java:2298) 05-10 20: 05: 51.895: E / AndroidRuntime (30317): um android.app.ActivityThread.access $ 1700 (ActivityThread.java:117) 05-10 20: 05: 51.895: E / AndroidRuntime (30317): um android.app.ActivityThread $ H.handleMessage (ActivityThread.java:938) 05-10 20: 05: 51.895: E / AndroidRuntime (30317): um android.os.Handler.dispatchMessage (Handler.java:99) 05-10 20: 05: 51.895: E / AndroidRuntime (30317): um android.os.Looper.loop (Looper.java:130) 05-10 20: 05: 51.895: E / AndroidRuntime (30317): um android.app.ActivityThread.main (ActivityThread.java:3683) 05-10 20: 05: 51.895: E / AndroidRuntime (30317): um java.lang.reflect.Method.invokeNative (Native Methode) 05-10 20: 05: 51.895: E / AndroidRuntime (30317): um java.lang.reflect.Method.invoke (Methode.java:507) 05-10 20: 05: 51.895: E / AndroidRuntime (30317): um com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:862) 05-10 20: 05: 51.895: E / AndroidRuntime (30317): um com.android.internal.os.ZygoteInit.main (ZygoteInit.java:620) 05-10 20: 05: 51.895: E / AndroidRuntime (30317): um dalvik.system.NativeStart.main (Native Methode) 05-10 20: 05: 51.895: E / AndroidRuntime (30317): Verursacht von: java.io.NotSerializableException: com.rigidbits.test.TestActivity 05-10 20: 05: 51.895: E / AndroidRuntime (30317): um java.io.ObjectOutputStream.writeNewObject (ObjectOutputStream.java:1535) 05-10 20: 05: 51.895: E / AndroidRuntime (30317): um java.io.ObjectOutputStream.writeObjectInternal (ObjectOutputStream.java:1847) 05-10 20: 05: 51.895: E / AndroidRuntime (30317): um java.io.ObjectOutputStream.writeObject (ObjectOutputStream.java:1689) 05-10 20: 05: 51.895: E / AndroidRuntime (30317): um java.io.ObjectOutputStream.writeObject (ObjectOutputStream.java:1653) 05-10 20: 05: 51.895: E / AndroidRuntime (30317): um java.io.ObjectOutputStream.writeFieldValues (ObjectOutputStream.java:1143) 05-10 20: 05: 51.895: E / AndroidRuntime (30317): um java.io.ObjectOutputStream.defaultWriteObject (ObjectOutputStream.java:413) 05-10 20: 05: 51.895: E / AndroidRuntime (30317): um java.io.ObjectOutputStream.writeHierarchy (ObjectOutputStream.java:1241) 05-10 20: 05: 51.895: E / AndroidRuntime (30317): um java.io.ObjectOutputStream.writeNewObject (ObjectOutputStream.java:1575) 05-10 20: 05: 51.895: E / AndroidRuntime (30317): um java.io.ObjectOutputStream.writeObjectInternal (ObjectOutputStream.java:1847) 05-10 20: 05: 51.895: E / AndroidRuntime (30317): um java.io.ObjectOutputStream.writeObject (ObjectOutputStream.java:1689) 05-10 20: 05: 51.895: E / AndroidRuntime (30317): um java.io.ObjectOutputStream.writeObject (ObjectOutputStream.java:1653) 05-10 20: 05: 51.895: E / AndroidRuntime (30317): um android.os.Parcel.writeSerializable (Parcel.java:1171) 05-10 20: 05: 51.895: E / AndroidRuntime (30317): ... 16 mehr
Wenn ich die Zeile in der onSaveInstanceState
-Methode kommentiere, damit das Data
-Objekt nicht gespeichert wird, verschwindet die App korrekt.
Irgendwelche Hilfe dabei?
Ok, ich glaube, das Problem ist, dass Sie eine private innere Klasse verwenden.
Daher hat es Zugriff auf die Methoden und Felder Ihrer äußeren Klasse , d. h. Ihre Aktivität.
Da Ihre Aktivität nicht serialisierbar ist ( und daher nicht ), erhalten Sie Ihre Ausnahme.
Eine Instanz von InnerClass kann nur innerhalb einer Instanz von OuterClass existieren und hat direkten Zugriff auf die Methoden und Felder ihrer einschließenden Instanz.
Es gibt zwei Lösungen.
Machen Sie Ihre innere Klasse statisch
Verschieben Sie Ihre innere Klasse in eine eigene Klasse und deklarieren Sie sie als public
Diese Lösungen machen Ihre Klasse Data
zu einer eigenständigen Klasse, und dann muss Ihre Aktivitätsinstanz nicht existieren
Referenz: Zypern
Tags und Links android