假设我有一个可序列化的 Java Bean 对象。当 Activity 故意通过 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 携带大量数据,否则它工作得很好。更好的是,您不必维护数据库模式。
不过,我很好奇其他人是如何做到这一点的。