如何更改共享首选项中的值
2022-09-01 21:55:58
我创建了一个应用程序,该应用程序使用共享首选项以便用户登录。用户的密码保存在首选项中。我的问题是,如果用户想要更改他/她的密码,我该如何更改首选项中的密码?
我创建了一个应用程序,该应用程序使用共享首选项以便用户登录。用户的密码保存在首选项中。我的问题是,如果用户想要更改他/她的密码,我该如何更改首选项中的密码?
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();
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() 的动态磁盘写入。