Скажем, у меня есть объект Java Bean, который является сериализуемым. Я хочу сохранить его безопасно, когда действие проходит через onDestroy() специально (т.е. OnSaveInstanceState() не вызывается).
Я ищу способ, который не связан с созданием базы данных и написанием объекта для этого (в основном, поскольку а) API БД Android ужасен и б), поскольку базы данных делают обновления приложений кошмаром, потому что нет достойной поддержки для применения миграции).
Я думал о сериализации объекта в ByteArrayOutputStream, base64 encode и записывал его в файл SharedPreferences в виде строки. Или это слишком далеко?
UPDATE
Может быть, идея с сериализованной строкой в конце концов не так уж плоха, похоже, очень хорошо работает. Вот что я делаю сейчас:
public static String objectToString(Serializable object) {
ByteArrayOutputStream out = new ByteArrayOutputStream();
try {
new ObjectOutputStream(out).writeObject(object);
byte[] data = out.toByteArray();
out.close();
out = new ByteArrayOutputStream();
Base64OutputStream b64 = new Base64OutputStream(out);
b64.write(data);
b64.close();
out.close();
return new String(out.toByteArray());
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
public static Object stringToObject(String encodedObject) {
try {
return new ObjectInputStream(new Base64InputStream(
new ByteArrayInputStream(encodedObject.getBytes()))).readObject();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
in onDestroy() Затем я могу просто написать строку Base64 в файл предпочтений, где он безопасен, пока я не прочитаю его снова во время следующего запуска активности. Это намного быстрее, чем я ожидал, и если ваш beans не несет огромных объемов данных, он работает очень хорошо. И даже лучше, вам не нужно поддерживать схему БД.
Тем не менее, мне интересно, как это делают другие.