我试图存储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中分享的技术。我似乎无法做到这一点。任何帮助都可以得到赞赏。
答案 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();
答案 2 :(得分:0)
您可以将每个Entry
转换为string
,如下所示:
abc_true, def_false;
然后将其保存为SharePreference
strings
。
当您从SharePreference
读取数据时,您必须将strings
转换为Entry
。