在我的应用程序(这是一种游戏),我有一个“敌人”类,例如像这样:恢复定制的ArrayList对象
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,我会得到一个异常,告诉我我试图对一个空对象(enemyList)执行[任何操作]。
如果我只是填充列表自己,所以有类似:
enemyList = (ArrayList<Enemy>) savedState.getSerializable("Enemies");
enemyList.add(bird);
enemyList.add(bee);
然后一切正常。
我假设这与事实有关,敌人的超类没有序列化的事实?但是,如果我连载这个,我得到一个'notSerializableException'错误。
请注意,我并不太在意将实际的Enemy对象保存/还原到Bundle,我可以手动处理。相反,我只是想让列表处于与原来状态相同的状态。我认为存储在ArrayList中的内容仅仅是对所讨论对象的引用,因此我无法弄清楚为什么会发生这种情况?
任何想法我做错了还是有更好的方法来实现我想要实现的?
相反,我只是想列表处于相同的状态,你的意思是你得到正确的值,但用户界面没有更新? – 2015-03-13 14:45:22
为什么将列表保存到'Bundle'? – Xcihnegn 2015-03-13 14:46:17
@Xcihnegn,因为我需要它处于和以前一样的状态。这是为了保持游戏状态,如果系统杀死了应用程序(例如,用户在游戏过程中接到电话,并在操作系统杀死应用程序一小时后回到该状态 - 我需要保留所有内容以便它可以接收它保留的地方 - 保存实际对象的当前状态不是问题,但我不知道如何让列表完好无损)。 – Zippy 2015-03-13 14:52:13