我正在开发一个游戏,我将我的Engine
对象从一个活动传递到另一个活动,然后再传递到第三个活动。从活动 A 到 B 的第一次传递没有问题地完成,但是当我将它从 B 传递到 C 时,我得到一个错误。
第一个活动是NewGameActivity
,它创建了我的Engine
对象。Engine
是Serializable
,它的所有孩子以及它的孩子的孩子等也是如此。使用以下代码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
对象并开始使用它。
现在我决定将我的引擎传递给第三个活动。从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
方法的调用的类。
在这一点上我很困惑,因为:
Engine
和所有相关的都是Serializable
- 我能够
Engine
从NewGameActivity
到GameActivity
没有任何问题 - 为什么
MainView
应该Serializable
?该类Engine
根本没有引用我的任何特定于 android 的类