关闭应用后,我的sharedPreferences不会保留。它总是保留我第一次运行应用程序时添加的默认值4。
static public Boolean addFavoriteItem(Integer itemId, Context c) {
SharedPreferences s = PreferenceManager.getDefaultSharedPreferences(c);
Set<String> list = new HashSet<>();
list = s.getStringSet("favItems",list);
list.add(Integer.toString(itemId));
s.edit().putStringSet("favItems",list).apply();
Log.d("listNowAdd:",list.toString());
return true;
}
static public Boolean removeFavoriteItem(Integer itemId, Context c) {
SharedPreferences s = PreferenceManager.getDefaultSharedPreferences(c);
Set<String> list = new HashSet<>();
list = s.getStringSet("favItems",list);
list.remove(Integer.toString(itemId));
s.edit().putStringSet("favItems",list).apply();
Log.d("listNowRemove:",list.toString());
return true;
}
即使在重新启动活动后,它仍会暂时起作用,但在关闭并重新打开应用后,是否有任何想法?
答案 0 :(得分:6)
您无法将StringSet
返回的SharedPreferences
修改为documented:
请注意,您不得修改此调用返回的set实例。如果您这样做,则无法保证存储数据的一致性,也无法根据您的能力修改实例。
基本上,您需要修改Set
所拥有的SharedPreferences
。它&#34;工作&#34;应用程序正在运行,因为相同(由您修改)Set
保留在内存中。当您尝试保存更改时,共享首选项实现会使用equals()
比较值,当然该集合与其自身相同,因此实际上不会保存任何更改。
您可以创建新的Set<String>
,例如HashSet<String>
和addAll()
您从共享偏好设置中检索到的集合,并对此副本进行修改。