在我的應用程序(這是一種遊戲),我有一個「敵人」類,例如像這樣:恢復定製的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