Як видалити пару ключів / значень із SharedPreferences?


90

Як видалити пару ключів / значень із SharedPreferences? Я поставив і я, щоб видалити це з преф.

Відповіді:


218
SharedPreferences mySPrefs = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = mySPrefs.edit();
editor.remove(key);
editor.apply();

Тут редактор - це редактор sharedPreferences.


11
Невелике доповнення до цієї відповіді. З документації для android: "Якщо вас не хвилює повернене значення, і ви використовуєте це з основного потоку вашого додатка, спробуйте застосувати замість apply ()."
Sreedevi J

3
@silwar, чому ти повторно відредагував apply () назад до коміту ()? знаючи, що в документації сказано використовувати apply (), якщо ми не хочемо працювати з поверненим значенням, і ні питання, ні відповідь не вписуються в цей випадок
Салім Мабубі

13

Важливо зазначити, що, якщо ви не плануєте щось робити зі зворотним значенням виклику commit (), немає абсолютно жодної причини для використання синхронного виклику commit () замість асинхронного виклику apply ().

Майте на увазі, що якщо ви викликаєте це з основного потоку / інтерфейсу користувача, інтерфейс блокується до завершення коміту (). Це може зайняти близько 100 мс, ніж приблизно 5 мс для заявки. Це може здатися не так вже й багато, але якщо це робитиметься постійно протягом програми, це, безумовно, складеться.

Отже, якщо ви не плануєте робити щось подібне, сподіваємось, в окремій темі:

editor.remove(String key); 
boolean success = editor.commit();
if (!success) { 
    // do something 
}

Натомість вам слід зробити це:

editor.remove(String key); 
editor.apply();

Я весь час шукав хорошого (реального світу) пояснення того, коли використовувати коміт проти застосування. Це чітко вказує на суть.
XMAN

9
SharedPreferences.Editor.remove(key) 
commit();

1
Якщо ви не використовуєте значення, що повертається з методу remove, і використовуєте це з основного потоку програми, спробуйте застосувати замість apply ().
kartik srivastava

9

Це дуже просто:

private SharedPreferences sharedPreferences() {
    return PreferenceManager.getDefaultSharedPreferences(mContext);
}

public void clearSharedPreferences() {
    sharedPreferences()
            .edit()
            .remove(SOME_KEY_1)
            .remove(SOME_KEY_2)
            .remove(SOME_KEY_3)
            .apply();
}

3

Ось як я вирішив це питання.

Спочатку я створив екземпляр SharedPreference як

SharedPreferences mobilePreference;

тоді я використав цей sharedPreference як

mobilePreference = this.getSharedPreferences("in.bhartisoftwares.amit.allamitappsthree", Context.MODE_PRIVATE);

Тут "in.bhartisoftwares.amit.allamitappsthree" - це моє ім'я пакета, і я використовую Context.MODE_PRIVATE, оскільки я хочу маніпулювати цією спільною перевагою лише для цього імені пакета.

Тоді я видаляю вибраний sharedPreference (ключ мого sharedPreference - mobileString) наступним чином:

mobilePreference.edit().remove("mobileString").commit();

Дивіться повний код нижче:

SharedPreferences mobilePreference = this.getSharedPreferences("in.bhartisoftwares.amit.allamitappsthree", Context.MODE_PRIVATE);
    mobilePreference.edit().remove("mobileString").commit();

1

Інформація

Просто sharedprefклас перевірки розширено Map, тому існує removeметод

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = prefs.edit();
editor.remove(String key);
editor.apply();

Тут редактор - це редактор sharedPreferences.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.