シリアライズ可能な Java Bean オブジェクトがあるとします。アクティビティが意図的に onDestroy()を通過するとき(つまり、onSaveInstanceState() が呼び出されないとき) に、安全に保管したいと考えています。
私は、データベースを作成してそれにオブジェクトを書き込むことを伴わない方法を探しています (主に、a) Android の DB API は恐ろしいものであり、b) データベースはアプリケーションの更新を悪夢にするため、移行を適用するための適切なサポートがないためです。 )。
オブジェクトを ByteArrayOutputStream にシリアル化し、それを base64 エンコードして、SharedPreferences ファイルに文字列として書き込むことを考えました。それとも、それは遠すぎますか?
アップデート
おそらく、文字列へのシリアル化のアイデアはそれほど悪くはなかったのですが、かなりうまく機能しているようです。これが私が今していることです:
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 文字列を環境設定ファイルに書き込むだけで済みます。このファイルは、次のアクティビティの起動時に再度読み取るまで安全です。予想よりもはるかに高速で、Bean が大量のデータを保持しない限り、かなりうまく機能します。さらに良いことに、DB スキーマを維持する必要はありません。
それでも、私は他の人がこれをどのように行うかについて興味があります。