在我的应用程序(这是一个游戏)中,我有一个“敌人”类,例如:
public class Enemy extends Sprite implements Serializable {
public Enemy(EnemyType type){
super();
}
}
然后我像这样声明了一个 ArrayList:
ArrayList<Enemy> enemyList = new ArrayList<Enemy>();
我可以添加敌人:
enemyList.add(bird);
enemyList.add(bee);
保存到捆绑包时,我简单地说:
bundle.putSerializable("Enemies", enemyList);
从捆绑包中恢复时,我有这个:
enemyList = (ArrayList<Enemy>) savedState.getSerializable("Enemies");
现在,它似乎确实恢复了arraylist(我可以检查它的大小并且它总是正确的 - 即,从包恢复时的大小与保存到包时的大小相同。
例如,我还记录了 ArrayList 的第一个索引,果然它列出了存在的敌人实例。
但是,如果我尝试在恢复后的任何时间操作 ArrayList,我会收到一个异常,告诉我我正在尝试对 Null 对象(enemyList)执行 [whatever action]。
如果我只是自己填充列表,那么有类似的东西:
enemyList = (ArrayList<Enemy>) savedState.getSerializable("Enemies");
enemyList.add(bird);
enemyList.add(bee);
然后一切都按预期工作。
我假设这与 Enemy 的超类没有序列化这一事实有关?但是,如果我对此进行序列化,则会收到“notSerializableException”错误。
请注意,我并不太担心将实际的 Enemy 对象保存/恢复到 Bundle,我可以手动处理。相反,我只希望列表处于与以前相同的状态。而且我认为存储在 ArrayList 中的只是对相关对象的引用,因此我无法弄清楚为什么会发生这种情况?
有什么想法我做错了什么,还是有更好的方法来实现我想要实现的目标?