Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何避免在android的共享首选项中添加重复值?_Android_Sharedpreferences - Fatal编程技术网

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

如何避免在android的共享首选项中添加重复值?,android,sharedpreferences,Android,Sharedpreferences,在android中,我使用共享首选项添加字符串值,但我想将要添加到共享首选项中的值与存储在共享首选项中的值进行比较,以避免添加重复值,但我不知道如何做到这一点? 或者有没有其他方法可以避免在共享首选项中添加重复的值 我使用以下代码添加字符串值 sharedpreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE); Editor editor = sharedpreferences.edit(); e

在android中,我使用共享首选项添加字符串值,但我想将要添加到共享首选项中的值与存储在共享首选项中的值进行比较,以避免添加重复值,但我不知道如何做到这一点? 或者有没有其他方法可以避免在共享首选项中添加重复的值

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

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

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

试试这样的

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();
}

我不知道我是否完全理解你的问题,但Android的
SharedReferences
有自己的功能来检查密钥是否已经存在

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();
}
但是,在这种特殊情况下,我不会执行此验证,只需覆盖该值即可,因为它将始终保持不变。

执行此操作

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

在android中,SharedReference中不可能有重复的值,因为每次更改或修改SharedReference上的值时,它都会将以前的值替换为当前值。因此,由于它的每个实例都有一个唯一的键,这意味着它将始终是唯一的(根据我的经验,每次我搞错这些键时,比如给Int和boolean赋予相同的名称键,例如,我最终导致应用程序崩溃或出现某种异常)


如果我错了,我希望其他人会纠正我,给你一个更好的答案

你试过什么吗??如果有,请粘贴代码。谢谢,我会试试的,这是与每个值比较还是仅与以前的值比较?@AnandK:如果您想存储多个值,请使用不同的
key\u值存储它,然后使用相关键检索字符串。因此,我们不能在SharedReference中存储多个值?当然,您可以添加多个值,但使用不同的“键”名称,或者如果密钥相同,您将只覆盖上一个!谢谢,我们可以在SharedReferences中存储多个值吗?当然可以,只需对这些值使用不同的键即可。在您的示例中,
Name
作为值。使用单个键,可以使用[SharedReferences.Editor的putStringSet](,java.util.Set))