SharedPreferences已更新,但在重置应用时会重置

时间:2014-09-13 15:36:58

标签: java android

每当我启动我的应用程序时,我都有以下代码:

C.userPreferences = getSharedPreferences("default",0);
C.userPreferencesEditor = C.userPreferences.edit();

C.something = C.userPreferences.getStringSet(C.SOMETHING, null);
C.something = C.something == null ? new HashSet<String>() : C.something;

for(String str : C.something){
    Log.d("debugging C.something",str);
}

这正确地记录了一个&#34;,#34;两个&#34;来自字符串集。

之后我有以下功能:

C.something.add("name");
C.userPreferencesEditor.putStringSet(C.SOMETHING, C.something);
C.userPreferencesEditor.apply(); //or with .commit();

调试显示&#34;一个&#34;,#34;两个&#34;和&#34;名称&#34;。 当我第一次重新启动应用程序并进行调试时,我只获得了#34;一个&#34;和&#34;两个&#34;。 知道为什么会这样吗? tyvm

1 个答案:

答案 0 :(得分:2)

This

  

从各种get方法返回的对象必须被应用程序视为不可变。

More specifically

  

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

您可以尝试复制检索到的HashSet,向副本添加新条目,并将其保存在首选项中吗?

顺便说一句 - 我真的很想知道为什么会这样 - 不是很直观......