Подтвердить что ты не робот

Как изменить значения в общих предпочтениях

Я создал приложение, которое использует общие предпочтения, чтобы пользователь мог войти в систему. Пароль пользователя сохраняется в предпочтении. Моя проблема в том, как я могу изменить пароль в предпочтении, если пользователь хочет изменить свой пароль?

4b9b3361

Ответ 1

SharedPreferences prefs = ... // you already know how to use prefs and have one of this objects
Editor editor = prefs.edit();
editor.putString("password", "new value");
editor.apply();

Ответ 2

Используйте apply() вместо commit()

Рекомендуется использовать Editor.apply() вместо commit() потому что apply() работает асинхронно в фоновом режиме, поэтому менее вероятно, что из-за этого будет ANR (если вообще будет).

getSharedPreferences("FILE_NAME", 0 /*FILE_MODE*/)
     .edit()
     .putString("password", "new value")
     .apply();

Документы упоминают о apply(),

Передайте изменения ваших предпочтений обратно из этого редактора в объект SharedPreferences, который он редактирует. Это атомарно выполняет запрошенные модификации, заменяя все, что в настоящее время находится в SharedPreferences.

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

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

Поскольку экземпляры SharedPreferences являются одиночными внутри процесса, любой экземпляр commit() можно безопасно заменить на apply(), если вы уже игнорировали возвращаемое значение.

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