如何避免在android中的共享首选项中添加重复值?

时间:2014-02-15 12:14:54

标签: android sharedpreferences

在android中,我使用共享首选项添加字符串值,但我想将我要添加到共享首选项的值与已存储在共享首选项中的值进行比较,以避免添加重复值,但我不是怎么做? 或者是否有任何其他方法可以避免在共享首选项中添加重复值?

我使用以下代码添加字符串值

  sharedpreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
  Editor editor = sharedpreferences.edit();
  editor.putString(Name, s);
  editor.commit(); 

4 个答案:

答案 0 :(得分:4)

在android中,你在sharedPreference中实际上没有重复值,因为每次你更改或修改sharedPreference上的值时,它都会用当前的值替换前一个值。因此,因为它的每个实例都有一个唯一的键,这意味着它将始终是唯一的(根据我的经验,每次我搞砸了这些键,比如为Int和boolean提供相同的名称键,例如我最终崩溃了app或有某种例外)

如果我错了,我希望别人会纠正我并为你提供更好的答案!

答案 1 :(得分:2)

首先从SharedPreferences获取字符串值oldvalue,然后与要存储的newvalue进行比较。如果String不匹配,则在SharedPreferences中保存newvalue

尝试这样的事情

String str_newvalue = "new string here"; 
SharedPreferences sharedpref = this.getSharedPreferences(this.getPackageName(), context.MODE_PRIVATE);

String str_oldvalue = sharedpref.getString("key", "");

if (!str_newvalue.equals(str_oldvalue)) {
    sharedpref.edit().putString("key", str_newvalue).commit();
}

答案 2 :(得分:2)

我不知道我是否理解你的问题,但Android SharedPreferences有自己的contains来检查一个密钥是否已经存在。

sharedpreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
if (sharedpreferences.contains(NAME)) //It already contains NAME key

另一方面,如果您担心的是单个键的值不能重复,只需在存储新值之前阅读它,然后再进行自我比较。

sharedpreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
if (!sharedpreferences.getString(NAME, "").equals(s)) { 
    // It does not have the same value, store 's'
    sharedpreferences
       .edit();
       .putString(NAME, s);
       .commit();
}

但是,在这种特殊情况下,我不会执行此验证,只是覆盖值,就是它,因为它总是一样的。

答案 3 :(得分:0)

这样做

SharedPreferences prefs = getPreferences(MODE_PRIVATE); 
String restoredText = prefs.getString("text", null);
if(restoredText.matches(your string))
{
// do nothing
}
 else
 {
 //save your data
 }
 }