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

#android #sharedpreferences

#Android #sharedpreferences

Вопрос:

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

Ответ №1:

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

Здесь editor — это редактор SharedPreferences.

Комментарии:

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

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

Ответ №2:

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

Имейте в виду, что если вы вызываете это из основного потока / пользовательского интерфейса, пользовательский интерфейс блокируется до завершения commit(). Это может занять около 100 мс, в то время как для применения требуется около 5 мс. Это может показаться не таким уж большим, но если выполнять это постоянно во всем приложении, это, безусловно, будет складываться.

Итак, если вы не планируете делать что-то подобное, надеюсь, в отдельном потоке:

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

Вместо этого вы должны делать это:

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

Комментарии:

1. Я повсюду искал хорошее (реальное) объяснение того, когда использовать фиксацию против применения. Это четко объясняет суть.

Ответ №3:

Это очень просто:

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

Ответ №4:

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

Комментарии:

1. Если вы не используете возвращаемое значение из метода remove, а используете его из основного потока вашего приложения, рассмотрите возможность использования apply() вместо этого.

Ответ №5:

Вот как я решил эту проблему.

Сначала я создал экземпляр SharedPreference как

 SharedPreferences mobilePreference;
  

затем я использовал это SharedPreference как

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

Здесь «в.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();
  

Ответ №6:

Информация

Просто проверьте, что sharedpref класс расширен до Map , поэтому существует remove метод

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

Здесь editor — это редактор SharedPreferences.