Я хотел бы сериализировать объект Пакета, но, может казаться, не нахожу простой способ сделать его. Используя Пакет не походит на опцию, так как я хочу хранить сериализированные данные в файл.
Какие-либо идеи о способах сделать это?
Причина я хочу это, состоит в том, чтобы сохранить и восстановить состояние моего действия, также когда это уничтожается пользователем. Я уже создаю Пакет с состоянием, которое я хочу сохранить в onSaveInstanceState. Но андроид только сохраняет этот Пакет, когда действие уничтожается СИСТЕМОЙ. Когда пользователь уничтожает действие, я должен сохранить его сам. Следовательно я хотел бы сериализировать и сохранить его в файл. Конечно, если бы у Вас есть какой-либо другой способ выполнить то же самое, я был бы благодарен за это также.
Править: Я решил закодировать свое состояние JSONObject вместо Пакета. Объект JSON может затем помещаться в Пакет как сериализуемое, или храниться в файл. Вероятно, не самый эффективный путь, но это просто, и это, кажется, работает хорошо.
сохранить любой Parcelable в файл очень просто:
FileOutputStream fos = context.openFileOutput(localFilename, Context.MODE_PRIVATE);
Parcel p = Parcel.obtain(); // i make an empty one here, but you can use yours
fos.write(p.marshall());
fos.flush();
fos.close();
наслаждайтесь!
Я использую SharedPreferences , чтобы обойти это ограничение, он использует тот же стиль хранения и получения данных putXXX () и getXXX () как и класс Bundle, и его относительно просто реализовать, если вы использовали Bundle раньше.
Итак, в onCreate у меня есть такая проверка
if(savedInstanceState != null)
{
loadGameDataFromSavedInstanceState(savedInstanceState);
}
else
{
loadGameDataFromSharedPreferences(getPreferences(MODE_PRIVATE));
}
Я сохраняю свои игровые данные в Bundle в onSaveInstanceState () и загружаю данные из Bundle в onRestoreInstanceState ()
И
Я также сохраняю игровые данные в SharedPreferences в onPause () и загружать данные из SharedPreferences в onResume ()
onPause()
{
// get a SharedPreferences editor for storing game data to
SharedPreferences.Editor mySharedPreferences = getPreferences(MODE_PRIVATE).edit();
// call a function to actually store the game data
saveGameDataToSharedPreferences(mySharedPreferences);
// make sure you call mySharedPreferences.commit() at the end of your function
}
onResume()
{
loadGameDataFromSharedPreferences(getPreferences(MODE_PRIVATE));
}
. Я не удивлюсь, если некоторые люди сочтут, что это неправильное использование SharedPreferences, но он выполняет свою работу. Я использую этот метод во всех своих играх (почти 2 миллиона загрузок) более года, и он работает.