每当我启动我的应用程序时,我都有以下代码:
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
答案 0 :(得分:2)
This说
从各种get方法返回的对象必须被应用程序视为不可变。
请注意,您不得修改此调用返回的set实例。如果您这样做,则无法保证存储数据的一致性,也无法根据您的能力修改实例。
您可以尝试复制检索到的HashSet,向副本添加新条目,并将其保存在首选项中吗?
顺便说一句 - 我真的很想知道为什么会这样 - 不是很直观......