如何将HashMap <string,parcelable =“”>保存到文件?

时间:2015-09-11 17:08:10

标签: android parcelable objectoutputstream instancestate

抱歉我的英语不好。

我有一个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);
}

2 个答案:

答案 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;恢复它。