Я создал приложение, которое использует общие предпочтения, чтобы пользователь мог войти в систему. Пароль пользователя сохраняется в предпочтении. Моя проблема в том, как я могу изменить пароль в предпочтении, если пользователь хочет изменить свой пароль?
Как изменить значения в общих предпочтениях
Ответ 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() завершится до переключения состояний.