在android sharedpreferences中设置<string>不会强制关闭</string>

时间:2013-07-04 11:52:37

标签: android sharedpreferences

我试图使用androids共享偏好,我记录了所有内容,下面的代码确实提交了字符串集。问题是当我强制关闭应用程序并再次启动时,settings.getStringSet返回一个空集。在任何地方都没有错误消息。

我曾尝试过PreferenceManager.getDefaultSharedPreferences,但这对我也不起作用。

谢谢你的时间。

public static final String PREFS_NAME = "MyPrefsFile";
private static final String FOLLOWED_ROUTES = "followedRoutes";

以及稍后在调用保存时:

public void onFollowClicked(View view){

SharedPreferences settings = getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();

Set<String> follows =  settings.getStringSet(FOLLOWED_ROUTES, new HashSet<String>());
follows.add(routeId);

editor.putStringSet(FOLLOWED_ROUTES, follows);
editor.commit();

}

2 个答案:

答案 0 :(得分:28)

您也可以通过这种方式解决g00dy提到的错误:

从sharedPreferences获取集合并将其保存在变量中。

然后在保存时再次添加它之前删除sharedpreferences中的集合。

SharedPreferences.Editor editor= sharedPref.edit();
editor.remove("mSet");
editor.apply(); 
editor.putStringSet("mSet", mSet);
editor.apply();

确保使用apply()或commit()两次。

答案 1 :(得分:19)

看看here

也适用于参考:

SharedPreferences

SharedPreferences.Editor

修改

这个实际上有一个错误,请参阅here。来自那里的摘录:

  

此问题仍存在于17 API级别。

     

它是由于getStringSet()方法引起的   SharedPreferences类不返回Set对象的副本:it   返回整个对象,当你向它添加新元素时,   sharedPrefencesImpl.EditorImpl类的commitToMemory方法请参见   现有值等于存储的前一个值。

     

解决此问题的方法是制作Set的副本   由SharedPreferences.getStringSet返回或强制写入   内存使用总是改变的其他偏好(例如,a   每次都存储集合大小的属性

<强> EDIT2:

可能有解决方案here,请查看。