抱歉我的英语不好。
我有一个HashMap<String, Parcelable>
来保存InstanceState
的一些RecyclerView
,我想将HashMap<String, Parcelable>
保存到文件中。
我使用ObjectOutputStream
,它可以写入文件,但是当我使用ObjectInputStream
时,它似乎没有读取一些有用的数据,因为{{1}的状态}}不会更改为已保存的状态。
为什么这不起作用?
如何通过“键值”保存和恢复RecyclerView
视图 ???
我想永久保存InstanceState
。
感谢您的帮助〜
我的代码:
InstanceState
1
private HashMap <String, Parcelable> hmRecyclerViewState = new HashMap<String, Parcelable>();
private Parcelable recyclerViewState;
ObjectOutputStream oos;
ObjectInputStream ois;
2
try {
ois = new ObjectInputStream(new FileInputStream(stateFile));
hmRecyclerViewState = (HashMap<String, Parcelable>)ois.readObject();
} catch (StreamCorruptedException e) {
e.printStackTrace();
} catch (OptionalDataException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ois != null) {
try {
ois.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
3
try {
oos = new ObjectOutputStream(new FileOutputStream(stateFile));
if (hmRecyclerViewState != null)
oos.writeObject(hmRecyclerViewState);
oos.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (oos != null)
oos.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
4
public void saveRecyclerViewState(String tableName) {
recyclerViewState = recyclerView.getLayoutManager().onSaveInstanceState();
hmRecyclerViewState.put(tableName, recyclerViewState);
}
答案 0 :(得分:0)
您可以将 Parcelable对象保存到字符串或 XML 或 JSON 类型。然后你可以将它们保存到文件中。顺便说一句,HashMap对象实现了Serializable,因此您可以毫无问题地将HashMap对象保存到文件中。
有关于PARCELABLE VS. JAVA SERIALIZATION IN ANDROID APP DEVELOPMENT
的一些信息答案 1 :(得分:0)
如果我按照你的问题而不是你可以做的事情...... 迭代你的地图&gt;&gt;放入字符串构建器&gt;&gt;将其保存到文件中。 在你的情况下,在你的parcelable类中创建一个toString()方法,以逗号分隔的格式返回所有字段,如(id,name,address ...)。
StringBuilder sb = new StringBuilder();
for (Map.Entry<String, Parcelable> entry : map.entrySet()) {
String key = entry.getKey();
Parcelable value = entry.getValue();
// append it to String builder
sb.append(key+":"value.toString()+"\n");
}
// write here to a file..
当您想要恢复从文件中读取&gt;&gt;把它放到Map&gt;&gt;恢复它。