Это дополнительный вопрос отсюда: Сохранить пакет в SharedPreferences
Я пытаюсь использовать класс ComplexPreferences из вышеупомянутого потока, чтобы сохранить объект Bundle в моем приложении для Android, но безрезультатно! Вот код, который я использую для сохранения и загрузки данных в ComplexPreferences (почти такой же, как в примере на странице загрузки для класса ComplexPreferences):
Класс 1:
save = ComplexPreferences.getComplexPreferences(this, SAVE, MODE_PRIVATE);
...
Bundle gameState = new Bundle();
saveGameData(gameState); // This puts the game data into the Bundle
save.putObject(SAVE, gameState);
save.commit();
Класс 2:
save = ComplexPreferences.getComplexPreferences(this, Class1.SAVE, MODE_PRIVATE);
...
Bundle gameState = save.getObject(Class1.SAVE, Bundle.class);
Проблема возникает при сохранении объекта в ComplexPreferences. Вот трассировка стека, которую я получаю при запуске приведенного выше кода:
Поскольку объект был сохранен неправильно, логично, что я также получаю ошибку при попытке загрузить объект снова:
java.lang.IllegalArgumentException: объект, хранящийся с сохранением ключа, является экземпляром другого класса в djb.ampersands.gui.ComplexPreferences.getObject(ComplexPreferences.java:63)
Вывод: когда я впервые задал этот вопрос, я сказал, что не могу заставить какие-либо объекты правильно сохраняться/загружаться. Однако теперь у меня есть этот метод для работы с некоторыми объектами, поэтому на самом деле мой вопрос сейчас заключается в том, будет ли он когда-либо работать для объектов Bundle, и ответ, похоже, нет... так что я думаю, что вернемся к рисунку доска!
Вы не должны сохранять свой пакет полностью, а только свой объект
save = ComplexPreferences.getComplexPreferences(this, SAVE, MODE_PRIVATE);
...
Bundle gameState = new Bundle();
saveGameData(gameState); // This puts the game data into the Bundle
save.putObject(SAVE, gameState);
save.commit();
. Пакеты могут быть более сложными для сериализации, чем простой POJO.