在我的应用程序(这是一款游戏)中,我有一个' Enemy' class,例如像:
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时,我只需输入:
bundle.putSerializable("Enemies", enemyList);
当从Bundle恢复时,我有这个:
enemyList = (ArrayList<Enemy>) savedState.getSerializable("Enemies");
现在,它确实似乎恢复了arraylist(我可以检查它的大小,它总是正确的 - 即,从捆绑中恢复的大小相同,就像保存到捆绑包时一样。
我还记录了例如ArrayList的第一个索引,并且确定它将敌人实例列为存在。
但是,如果我在恢复后的任何时候尝试操作ArrayList,我会得到一个异常,告诉我我正在尝试对Null对象(enemyList)执行[无论什么操作]。
如果我只是自己填充列表,那么就像:
enemyList = (ArrayList<Enemy>) savedState.getSerializable("Enemies");
enemyList.add(bird);
enemyList.add(bee);
然后一切都按预期工作。
我认为这与敌人的超级级别没有被序列化的事实有关?但是,如果我将其序列化,我会得到一个“不可信的异常”#39;错误。
请注意,我并不太担心将实际的Enemy对象保存/恢复到Bundle,我可以手动处理。相反,我只是希望列表处于相同的状态。而且我认为存储在ArrayList中的内容只是对相关对象的引用,因此我无法弄清楚为什么会发生这种情况?
任何想法,我做错了,或者有更好的方法来实现我想要实现的目标?