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


Ответы:


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

Здесь редактор - это редактор sharedPreferences.


11
Небольшое дополнение к этому ответу. Из документации Android: «Если вас не волнует возвращаемое значение и вы используете его из основного потока приложения, подумайте об использовании метода apply ()».
Sreedevi J

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

13

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

Имейте в виду, что если вы вызываете это из основного потока / потока пользовательского интерфейса, пользовательский интерфейс блокируется до завершения commit (). Это может занять около 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.