重新启动后不保存SharedPreferences

时间:2016-08-21 15:53:22

标签: android sharedpreferences

关闭应用后,我的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;
}

即使在重新启动活动后,它仍会暂时起作用,但在关闭并重新打开应用后,是否有任何想法?

1 个答案:

答案 0 :(得分:6)

您无法将StringSet返回的SharedPreferences修改为documented

  

请注意,您不得修改此调用返回的set实例。如果您这样做,则无法保证存储数据的一致性,也无法根据您的能力修改实例。

基本上,您需要修改Set所拥有的SharedPreferences。它&#34;工作&#34;应用程序正在运行,因为相同(由您修改)Set保留在内存中。当您尝试保存更改时,共享首选项实现会使用equals()比较值,当然该集合与其自身相同,因此实际上不会保存任何更改。

您可以创建新的Set<String>,例如HashSet<String>addAll()您从共享偏好设置中检索到的集合,并对此副本进行修改。