Как сериализировать Пакет?

Я хотел бы сериализировать объект Пакета, но, может казаться, не нахожу простой способ сделать его. Используя Пакет не походит на опцию, так как я хочу хранить сериализированные данные в файл.

Какие-либо идеи о способах сделать это?

Причина я хочу это, состоит в том, чтобы сохранить и восстановить состояние моего действия, также когда это уничтожается пользователем. Я уже создаю Пакет с состоянием, которое я хочу сохранить в onSaveInstanceState. Но андроид только сохраняет этот Пакет, когда действие уничтожается СИСТЕМОЙ. Когда пользователь уничтожает действие, я должен сохранить его сам. Следовательно я хотел бы сериализировать и сохранить его в файл. Конечно, если бы у Вас есть какой-либо другой способ выполнить то же самое, я был бы благодарен за это также.

Править: Я решил закодировать свое состояние JSONObject вместо Пакета. Объект JSON может затем помещаться в Пакет как сериализуемое, или храниться в файл. Вероятно, не самый эффективный путь, но это просто, и это, кажется, работает хорошо.

20
задан hermo 9 April 2010 в 05:07
поделиться

2 ответа

сохранить любой 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();

наслаждайтесь!

7
ответ дан 30 November 2019 в 01:13
поделиться

Я использую 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 миллиона загрузок) более года, и он работает.

6
ответ дан 30 November 2019 в 01:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: