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

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

Solutions Collecting From Web of "如何更改共享首选项中的值"

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.commit(); 

使用apply()而不是commit()

build议您使用Editor.apply()而不是commit()因为apply()在后台asynchronous工作,所以不太可能会因为ANR(如果有的话)而有ANR。

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

Docs提到了apply()

将您的首选项更改从此编辑器提交到正在编辑的SharedPreferences对象。 这自动执行所请求的修改,replaceSharedPreferences中当前的任何内容。

请注意,当两个编辑器同时修改首选项时,最后一个调用申请获胜。

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

由于SharedPreferences实例是一个进程中的单例,如果您已经忽略了返回值,则可以使用apply()replace任何commit()的实例。

您不必担心Android组件生命周期及其与apply()写入磁盘的交互。 该框架确保在切换状态之前,从apply()写入的正在进行的磁盘写入完成。