これは、ここからの追加の質問です:バンドルを SharedPreferences に保存する
前述のスレッドの ComplexPreferences クラスを使用して、Android アプリに Bundle オブジェクトを保存しようとしていますが、役に立ちません! データをComplexPreferencesに保存してロードするために使用しているコードは次のとおりです(ComplexPreferencesクラスのダウンロードページの例とほぼ同じです):
クラス1:
save = ComplexPreferences.getComplexPreferences(this, SAVE, MODE_PRIVATE);
...
Bundle gameState = new Bundle();
saveGameData(gameState); // This puts the game data into the Bundle
save.putObject(SAVE, gameState);
save.commit();
クラス 2:
save = ComplexPreferences.getComplexPreferences(this, Class1.SAVE, MODE_PRIVATE);
...
Bundle gameState = save.getObject(Class1.SAVE, Bundle.class);
問題は、オブジェクトを ComplexPreferences に保存するときに発生するようです。上記のコードを実行したときに得られるスタック トレースは次のとおりです。
致命的な例外: メイン java.lang.RuntimeException: アクティビティを一時停止できません {djb.ampersands/djb.ampersands.Ampersands}: java.lang.IllegalStateException: 循環参照エラー 問題のあるフィールド: ゲーム 問題のあるオブジェクト: preserveType: false、タイプ: クラス djb .ampersands.Ampersands、obj: djb.ampersands.Ampersands@41272778 で android.app.ActivityThread.performPauseActivity(ActivityThread.java:2838) で android.app.ActivityThread.performPauseActivity(ActivityThread.java:2794) で android.app.ActivityThread .handlePauseActivity(ActivityThread.java:2772) で android.app.ActivityThread.access$800(ActivityThread.java:130) で android.app.ActivityThread$H.handleMessage(ActivityThread.java:1206) で android.os.Handler.dispatchMessage (Handler.java:99) で android.os.Looper.loop(Looper.java:137) で android.app.com.android.internal.os. ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) at dalvik.system.NativeStart.main(Native Method) 原因: java.lang. IllegalStateException: 循環参照エラー 問題のあるフィールド: ゲーム 問題のあるオブジェクト: preserveType: false、タイプ: クラス djb.ampersands.Ampersands、obj: djb.ampersands.Ampersands@41272778 at com.google.gson.JsonSerializationVisitor.visitObjectField(JsonSerializationVisitor.java:117) ) com.google.gson.ReflectingFieldNavigator.visitFieldsReflectively(ReflectingFieldNavigator.java:69) で com.google.gson.ObjectNavigator で。com.google.gson.JsonSerializationVisitor.getJsonElementForChild(JsonSerializationVisitor.java:147) で (ObjectNavigator.java:120) com.google.gson.JsonSerializationVisitor.addAsChildOfObject(JsonSerializationVisitor.java:127) で.visitObjectField(JsonSerializationVisitor.java:114) com.google.gson.ReflectingFieldNavigator.visitFieldsReflectively(ReflectingFieldNavigator.java:69) com.google.gson.ObjectNavigator.accept(ObjectNavigator.java:120) com.google.gson. JsonSerializationVisitor.getJsonElementForChild(JsonSerializationVisitor.java:147) com.google.gson.JsonSerializationVisitor.addAsChildOfObject(JsonSerializationVisitor.java:127) com.google.gson.JsonSerializationVisitor.visitObjectField(JsonSerializationVisitor.java:114) com.google.gson.ReflectingFieldNavigator.visitFieldsReflectively(ReflectingFieldNavigator.java:69) com.google.gson.ObjectNavigator.accept(ObjectNavigator.java:120) com.google.gson.JsonSerializationContextDefault.serialize(JsonSerializationContextDefault.java:62) com .google.gson.BaseMapTypeAdapter.serialize(BaseMapTypeAdapter.java:34) で com.google.gson.MapTypeAdapter.serialize(MapTypeAdapter.java:53) で com.google.gson.MapTypeAdapter.serialize(MapTypeAdapter.java:33) でcom.google.gson.JsonSerializationVisitor.findAndInvokeCustomSerializer(JsonSerializationVisitor.java:184) com.google.gson.JsonSerializationVisitor.visitFieldUsingCustomHandler(JsonSerializationVisitor.java:204) com.google.gson.ReflectingFieldNavigator.visitFieldsReflectively(ReflectingFieldNavigator.java:63) com.google で。gson.ObjectNavigator.accept(ObjectNavigator.java:120) com.google.gson.JsonSerializationContextDefault.serialize(JsonSerializationContextDefault.java:62) com.google.gson.JsonSerializationContextDefault.serialize(JsonSerializationContextDefault.java:53) com.google .gson.Gson.toJsonTree(Gson.java:220) で com.google.gson.Gson.toJson(Gson.java:260) で com.google.gson.Gson.toJson(Gson.java:240) で djb. ampersands.gui.ComplexPreferences.putObject(ComplexPreferences.java:47) で djb.ampersands.Ampersands.onPause(Ampersands.java:93) で android.app.Activity.performPause(Activity.java:5106) で android.app.Instrumentation .callActivityOnPause(Instrumentation.java:1225) at android.app.ActivityThread.performPauseActivity(ActivityThread.java:2825) ... 12 より多くの原因: com.google.gson.CircularReferencom.google.gson.JsonSerializationContextDefault.serialize(JsonSerializationContextDefault.java:62) の ObjectNavigator.accept(ObjectNavigator.java:120) com.google.gson.JsonSerializationContextDefault.serialize(JsonSerializationContextDefault.java:53) の com.google.gson .Gson.toJsonTree(Gson.java:220) at com.google.gson.Gson.toJson(Gson.java:260) at com.google.gson.Gson.toJson(Gson.java:240) at djb.ampersands. gui.ComplexPreferences.putObject(ComplexPreferences.java:47) で djb.ampersands.Ampersands.onPause(Ampersands.java:93) で android.app.Activity.performPause(Activity.java:5106) で android.app.Instrumentation.callActivityOnPause (Instrumentation.java:1225) at android.app.ActivityThread.performPauseActivity(ActivityThread.java:2825) ... 12 以上原因: com.google.gson.CircularReferencom.google.gson.JsonSerializationContextDefault.serialize(JsonSerializationContextDefault.java:62) の ObjectNavigator.accept(ObjectNavigator.java:120) com.google.gson.JsonSerializationContextDefault.serialize(JsonSerializationContextDefault.java:53) の com.google.gson .Gson.toJsonTree(Gson.java:220) at com.google.gson.Gson.toJson(Gson.java:260) at com.google.gson.Gson.toJson(Gson.java:240) at djb.ampersands. gui.ComplexPreferences.putObject(ComplexPreferences.java:47) で djb.ampersands.Ampersands.onPause(Ampersands.java:93) で android.app.Activity.performPause(Activity.java:5106) で android.app.Instrumentation.callActivityOnPause (Instrumentation.java:1225) at android.app.ActivityThread.performPauseActivity(ActivityThread.java:2825) ... 12 以上原因: com.google.gson.CircularReferenCircularReferen
オブジェクトが正しく保存されていないため、オブジェクトを再度読み込もうとするとエラーが発生することは理にかなっています。
java.lang.IllegalArgumentException: キー保存で保存されたオブジェクトは、djb.ampersands.gui.ComplexPreferences.getObject(ComplexPreferences.java:63) で他のクラスのインスタンスです
概要:この質問を最初に書いたとき、オブジェクトを正しく保存/ロードできないと言いました。しかし、私は今、このメソッドがいくつかのオブジェクトに対して機能するようになったので、本当に私の質問は、バンドル オブジェクトに対して機能することができるかということです。ボード!