0

我正在开发一个游戏,我将我的Engine对象从一个活动传递到另一个活动,然后再传递到第三个活动。从活动 A 到 B 的第一次传递没有问题地完成,但是当我将它从 B 传递到 C 时,我得到一个错误。

第一个活动是NewGameActivity,它创建了我的Engine对象。EngineSerializable,它的所有孩子以及它的孩子的孩子等也是如此。使用以下代码NewGameActivity将我的Engine对象传递给:GameActivity

// 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对象并开始使用它。

现在我决定将我的引擎传递给第三个活动。从GameActivityBudgetActivity使用以下代码启动:

// 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. 我能够EngineNewGameActivityGameActivity没有任何问题
  3. 为什么MainView应该Serializable?该类Engine根本没有引用我的任何特定于 android 的类
4

0 回答 0