Как изменить значения в общих настройках - PullRequest
21 голосов
/ 28 января 2011

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

Ответы [ 2 ]

46 голосов
/ 28 января 2011
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();
5 голосов
/ 01 июля 2017

Используйте 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 () будет блокироваться до тех пор, пока не будут выполнены все асинхронные коммиты, а также сам коммит.Для отдельных синглов внутри процесса можно безопасно заменить любой экземпляр commit () на apply (), если вы уже игнорировали возвращаемое значение.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...