Скажем, у меня есть объект Java Bean, который можно сериализировать. Я хочу сохранить его в безопасном месте, когда действие проходит через onDestroy () с целью (т.е. onSaveInstanceState () не вызывается).
Я ищу способ, который не включает создание базы данных и запись объекта в нее (в основном, из-за того, что а) API БД Android ужасен и б) поскольку базы данных превращают обновления приложений в кошмар, потому что нет достойной поддержки для применения миграций).
Я думал о сериализации объекта в ByteArrayOutputStream, base64 его кодирует и записывает в файл 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;
}
в onDestroy () Затем я могу просто записать строку Base64 в файл настроек, где безопасно, пока я не прочитаю ее снова во время следующего запуска действия. Это намного быстрее, чем я ожидал, и если ваши бины не переносят огромные объемы данных, это работает довольно хорошо. И что еще лучше, вам не нужно поддерживать схему БД.
Тем не менее, мне любопытно, как другие делают это.