如何更改共享首选项中的值

2022-09-01 21:55:58

我创建了一个应用程序,该应用程序使用共享首选项以便用户登录。用户的密码保存在首选项中。我的问题是,如果用户想要更改他/她的密码,我该如何更改首选项中的密码?


答案 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()

建议您使用而不是因为在后台异步工作,因此不太可能因此而存在ANR(如果有的话)。Editor.apply()commit()apply()

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

文档提到apply()

将首选项更改从此编辑器提交回它正在编辑的共享首选项对象。这会以原子方式执行请求的修改,替换当前共享首选项中的任何内容。

请注意,当两个编辑者同时修改首选项时,最后一个调用 apply 的编辑者优先。

与提交()不同,commit()将其首选项同步写出到持久性存储,apply()立即将其更改提交到内存中的共享首选项,但启动异步提交到磁盘,并且您不会收到任何失败的通知。如果此 SharedPreferences 上的另一个编辑器在 apply() 仍处于未完成状态时执行常规 commit(),则 commit() 将阻塞,直到所有异步提交以及提交本身都完成。

由于 SharedPreferences 实例是进程中的单例实例,因此,如果您已经忽略了返回值,则可以安全地将 commit() 的任何实例替换为 apply()。

您无需担心 Android 组件生命周期及其与 apply() 写入磁盘的交互。该框架确保在切换状态之前完成来自 apply() 的动态磁盘写入。


推荐