2014-02-15 3 views
0

В андроиде я добавляю строковые значения, используя общие настройки, но я хочу сравнить значение, которое я собираюсь добавить в общие настройки со значениями, которые уже хранятся в общих предпочтениях, чтобы избежать добавления повторяющихся значений, но я не получаю как это сделать? или есть альтернативный метод, чтобы избежать добавления повторяющихся значений в общих настройках?Как избежать добавления повторяющихся значений в общих настройках в android?

Я добавляю строковые значения, используя следующий код

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

Попробуйте что-нибудь? если есть, то вставьте код .. –

+0

+1 для добавления кода .. –

ответ

2

Сначала получить строковое значение из SharedPreferences, как oldvalue затем сравните с newvalue, которые вы хотите сохранить. Если String не соответствует, сохраните newvalue в SharedPreferences.

Try что-то вроде этого

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

Спасибо, я попробую, это сопоставимо с любыми значениями или только с предыдущим значением? –

+1

SharedPreferences сохраняет только одно значение для одного ключа. –

+0

@AnandK: Если вы хотите сохранить более одного значения, сохраните его с помощью разных 'key_values', затем получите строку со связанным ключом. –

2

Я не знаю, правильно ли я понять Ваш вопрос достаточно хорошо или нет, но андроида 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(); 
} 

Однако в данном конкретном случае я бы не выполнять эту проверку, просто перезаписать значение, и это то, как это всегда собирается быть тем же самым.

+0

спасибо, можем ли мы сохранить больше то одно значение в SharedPreferences? –

+0

Да, конечно, просто используйте разные клавиши для этих значений, и все. В вашем примере у вас есть значение «Name». Используя один ключ, вы можете использовать [SharedPreferences.Editor's putStringSet] (http://developer.android.com/reference/android/content/SharedPreferences.Editor.html#putStringSet(java.lang.String, java.util.Set )) – GoRoS

0

ли это

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

В андроида вы не можете иметь повторяющееся значение в sharedPreference, потому что каждый раз, когда вы изменяете или изменить значение на sharedPreference он заменит предыдущий с током. Так как каждый экземпляр имеет единственный уникальный ключ, означающий, что он всегда будет уникальным (в моем опыте каждый раз, когда я перепутал эти ключи, например, выдавая один и тот же ключ имени как для Int, так и для boolean, например, я заканчиваю сбой приложение или с каким-то исключением)

Если я ошибаюсь, я надеюсь, что кто-то другой исправит меня и предоставит вам лучший ответ!

+0

, поэтому мы не можем хранить больше одного значения в sharedPreference? –

+0

нет, это правильно, +1 для хорошего описания. –

+0

Вы можете добавить больше, чем по значению, конечно, но с другим именем «KEY» или если ключ тот же, вы просто перезапишите предыдущий! – murielK

Смежные вопросы