有人知道如何将对象保存并恢复到android上的文件吗?
答案 0 :(得分:11)
使用openFileOutput()(http://developer.android.com/guide/topics/data/data-storage.html#filesInternal)打开文件,而不是使用ObjectOutputStream(http://download.oracle.com/javase/1.4.2/docs/api/java/io/ObjectOutputStream.html)将对象写入文件。
使用他们邪恶的双胞胎openFileInput()和ObjectInputStream()来反转这个过程。
答案 1 :(得分:3)
这取决于您是否要在内部或外部媒体上保存文件。对于这两种情况,Android DEV网站上都有很好的示例:http://developer.android.com/guide/topics/data/data-storage.html - 这应该是明智的帮助
答案 2 :(得分:1)
请参阅此处获取代码示例:android how to save a bitmap - buggy code
答案 3 :(得分:0)
以下是@ yayay建议的测试示例。请注意,使用readObject()
会返回Object
,因此您需要进行强制转换,尽管编译器会抱怨它是未经检查的强制转换。我仍然可以运行我的代码。您可以阅读有关投射问题here的更多信息。
请确保您的课程(在我的情况下,ListItemsModel
)是可序列化的,因为writeObject()
会序列化您的对象,而readObject()
会反序列化它。如果不是(你没有持久性并且logcat抛出NotSerializableException
),那么确保你的类实现java.io.Serializable
,你就可以了。注意,此接口中不需要实现任何方法。如果您的课程无法实施Serializable
并且工作(例如第三方图书馆课程),this link会帮助您序列化您的对象。
private void readItems() {
FileInputStream fis = null;
try {
fis = openFileInput("groceries");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
ObjectInputStream ois = new ObjectInputStream(fis);
ArrayList<ListItemsModel> list = (ArrayList<ListItemsModel>) ois.readObject();
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
private void writeItems() {
FileOutputStream fos = null;
try {
fos = openFileOutput("groceries", Context.MODE_PRIVATE);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(itemsList);
} catch (IOException e) {
e.printStackTrace();
}
}