2

对不起我的英语不好。

我有 aHashMap<String, Parcelable>来保存一些InstanceStatea RecyclerView,我想将 a 保存HashMap<String, Parcelable>到一个文件中。

我用的是ObjectOutputStream,它可以写入一个文件,但是当我使用时ObjectInputStream,它似乎没有读取一些有用的数据,因为它的状态RecyclerView并没有改变到已经保存的状态。

为什么这不起作用?

如何通过“键值”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;
    }
}
4

2 回答 2

0

您可以将Parcelable 对象保存为StringXMLJSON类型。然后您可以将它们保存到文件中。顺便说一句,HashMap 对象实现了 Serializable,因此您可以毫无问题地将 HashMap 对象保存到文件中。

有一些关于PARCELABLE VS的信息。Android APP开发中的JAVA序列化

于 2015-09-11T18:07:18.413 回答
0

如果我遵循您的问题,那么您可以执行类似的操作。遍历您的地图>>放入字符串构建器>>将其保存到文件中。在您的情况下,在您的 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..

当你想从文件中恢复读取>>把它放入地图>>恢复它。

于 2015-09-12T04:08:49.607 回答