0

Engineオブジェクトをあるアクティビティから別のアクティビティに渡し、次に 3 番目のアクティビティに渡すゲームに取り組んでいます。アクティビティ A から B への最初のパスは問題なく完了しますが、B から C に渡すとエラーが発生します。

最初のアクティビティはNewGameActivityEngineオブジェクトを作成します。EngineSerializable、そのすべての子とその子の子などです。次のコードを使用して、オブジェクトをにNewGameActivity渡します。EngineGameActivity

// method of the NewGameActivity class
public void newGame(View view) {
    final Engine engine = getEngine();

    Intent intent = new Intent(this, GameActivity.class);
    intent.putExtra(ENGINE, engine);
    startActivity(intent);
}

これはすべて完全に正常に機能します。はオブジェクトGameActivityを取得して、その操作を開始できます。Engine

ここで、エンジンを 3 番目のアクティビティに渡すことにしました。内から、次のコードを使用してGameActivity起動します。BudgetActivity

// method of the GameActivity class
public final void showBudget() {
    final Engine engine = this.mainView.getEngine();

    Intent intent = new Intent(this, BudgetActivity.class);
    intent.putExtra(GameActivity.ENGINE, engine);
    startActivity(intent);
}

そのため、以前とまったく同じオブジェクトを渡しています。(もちろん、エンジンのメンバーは少し変わっています)

問題は、次のエラーが発生することです。

java.lang.RuntimeException: Parcelable で IOException が発生し、シリアル化可能なオブジェクト (name = test.engine.Engine) を書き込んでいます。
...
原因: java.io.NotSerializableException: test.android.MainView
...

MainViewの実装ですandroid.view.View。表示されるのはメイン コンポーネントであり、上記のメソッドGameActivityの呼び出しを実行するクラスです。showBudget

私はこの時点で非常に混乱しています:

  1. Engineそして関連するすべてがSerializable
  2. EngineからNewGameActivityまでGameActivity問題なく通過できました
  3. なぜあるべきMainViewですSerializableか?クラスには、Android固有のEngineクラスへの参照がまったくありません
4

0 に答える 0