如何使用共享首选项存储和检索HashMap <string,boolean =“”>

时间:2016-09-12 10:32:13

标签: android hashmap sharedpreferences

我试图存储Checkbox文本及其在共享首选项中的布尔值状态。我遇到了问题 - 在检索值时需要Entry<String, Capture<?>>找不到Entry<String, java.lang.Boolean>不相容的类型(在此行Map.Entry<String, Boolean> entry4

这就是我将值存储在共享首选项中的方式 -

SharedPreferences checkedFilterPref = getContext().getSharedPreferences(
                        Constants.FILTER_CHECKED_PREF, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = checkedFilterPref.edit();
for (Map.Entry<String, Boolean> entry1 : filterPrefHashMap.entrySet()) {
    editor.putBoolean(entry1.getKey(), entry1.getValue());
}
editor.commit();

这就是我尝试检索HashMap值的方法 -

for (Map.Entry<String, Boolean> entry4 : checkedFilterPref.getAll().entrySet()) {
    filterPrefHashMap.put(entry4.getKey(), entry4.getValue());
}

我遵循此StackOverflow post中分享的技术。我似乎无法做到这一点。任何帮助都可以得到赞赏。

3 个答案:

答案 0 :(得分:5)

您可以在共享首选项中保存原始数据类型。因此,将HashMap保存到共享首选项的最简单方法是在Json字符串中转换HashMap,然后将该字符串保存在共享首选项中。

在检索它时,你必须再次将字符串转换为HashMap。

答案 1 :(得分:0)

您可以尝试这样做:

File file = new File(getDir("data", MODE_PRIVATE), "map");
ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream(file));
outputStream.writeObject(map);
outputStream.flush();
outputStream.close();

Source

答案 2 :(得分:0)

您可以将每个Entry转换为string,如下所示:

abc_true, def_false;

然后将其保存为SharePreference strings

当您从SharePreference读取数据时,您必须将strings转换为Entry