В моем приложении (что это игра), у меня есть класс «врага», например, так:Восстановление 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);
И при восстановлении из Bundle, у меня есть:
enemyList = (ArrayList<Enemy>) savedState.getSerializable("Enemies");
Теперь это, кажется, восстановить ArrayList (я могу проверить его размер, и это всегда правильно - то есть, тот же размер при восстановлении из пучка, как это было при сохранении в комплекте.
Я также зарегистрировал, например, первый индекс ArrayList и, конечно же, перечисляет экземпляр врага как находящийся там.
Однако, если я пытаюсь манипулировать ArrayList в любое время после восстановления, я получаю исключение, говорящее мне о том, что я пытаюсь выполнить [любое действие] для объекта Null (enemyList).
Если я просто заполнить список сам, так что есть что-то вроде:
enemyList = (ArrayList<Enemy>) savedState.getSerializable("Enemies");
enemyList.add(bird);
enemyList.add(bee);
Тогда все работает, как ожидалось.
Я предполагаю, что это связано с тем, что суперкласс Enemy не сериализуется? Однако, если я сериализую это, я получаю ошибку «notSerializableException».
Обратите внимание: я не очень беспокоюсь о сохранении/восстановлении реальных объектов Enemy в Bundle, я могу справиться с этим вручную. Скорее я просто хочу, чтобы список находился в том же состоянии, что и было. И я думал, что то, что хранилось в ArrayList, было просто ссылкой на объекты, о которых идет речь, поэтому я не могу понять, почему это происходит?
Любые идеи, что я делаю неправильно, или есть лучший способ достичь того, чего я пытаюсь достичь?
Скорее я просто хочу, чтобы список находился в том же состоянии, что и было, вы имеете в виду, что получаете правильное значение, но пользовательский интерфейс не обновляется? –
Зачем сохранять список в 'Bundle'? – Xcihnegn
@Xcihnegn, потому что мне нужно, чтобы оно находилось в том же состоянии, что и раньше. Это должно сохранить состояние игры, если система убивает приложение (например, пользователь получает телефонный звонок во время игры, возвращается к нему через час после того, как ОС убила приложение - мне нужно все, чтобы его сохранить, чтобы он мог забрать где он остановился - сохранение текущего состояния текущего объекта не является проблемой, но я не знаю, как оставить список в целости). – Zippy