【发布时间】:2015-12-08 07:47:04
【问题描述】:
对不起,我的英语不好。
我有一个HashMap<String, Parcelable> 来保存RecyclerView 的一些InstanceStates,我想将HashMap<String, Parcelable> 保存到一个文件中。
我使用ObjectOutputStream,它可以写入文件,但是当我使用ObjectInputStream时,它似乎没有读取一些有用的数据,因为RecyclerView的状态没有改变到已经保存的状态。
为什么这不起作用?
如何保存和恢复 "key-value" 的 InstanceState 视图????
我想保存InstanceState永久。
谢谢你的帮助~
我的代码:
private HashMap <String, Parcelable> hmRecyclerViewState = new HashMap<String, Parcelable>();
private Parcelable recyclerViewState;
ObjectOutputStream oos;
ObjectInputStream ois;
1.
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();
}
}
}
2.
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();
}
}
3.
public void saveRecyclerViewState(String tableName) {
recyclerViewState = recyclerView.getLayoutManager().onSaveInstanceState();
hmRecyclerViewState.put(tableName, recyclerViewState);
}
4.
public void restoreRecyclerViewState(String tableName) {
if ( hmRecyclerViewState.get(tableName) != null) {
recyclerViewState = hmRecyclerViewState.get(tableName);
recyclerView.getLayoutManager().onRestoreInstanceState(recyclerViewState);
recyclerViewState = null;
}
}
【问题讨论】:
-
您可以对其进行迭代并将其保存为文件...
-
@sourabhbans 谢谢。但是“迭代它”是什么意思?你能显示一些代码吗?
标签: android parcelable objectoutputstream instancestate