#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.