Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何更改共享首选项中的值_Java_Android_Sharedpreferences - Fatal编程技术网

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

Java 如何更改共享首选项中的值,java,android,sharedpreferences,Java,Android,Sharedpreferences,我已经创建了一个应用程序,它使用一个共享的首选项让用户登录。用户的密码保存在首选项中。我的问题是,如果用户想要更改其密码,如何更改首选项中的密码?使用apply()而不是commit() SharedPreferences prefs = ... // you already know how to use prefs and have one of this objects Editor editor = prefs.edit(); editor.putString("password", "

我已经创建了一个应用程序,它使用一个共享的首选项让用户登录。用户的密码保存在首选项中。我的问题是,如果用户想要更改其密码,如何更改首选项中的密码?

使用
apply()
而不是
commit()
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();
建议您使用
Editor.apply()
而不是
commit()
,因为
apply()
在后台异步工作,因此不太可能因此产生ANR(如果有的话)

关于
apply()

将首选项更改从此编辑器提交回 正在编辑的SharedReferences对象。这在原子上执行 请求的修改,替换当前在 共享引用

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

与commit()不同,commit()将其首选项写入持久化 以同步方式,apply()将其更改提交到内存中的 SharedReference会立即启动,但会启动对的异步提交 磁盘,您将不会收到任何故障通知。如果另一个编辑在 此SharedReferences在执行apply()时执行常规提交() 仍然未完成,commit()将阻塞,直到所有异步提交完成 与提交本身一样完成

由于SharedReferences实例是流程中的单例,因此 如果需要,可以安全地将commit()的任何实例替换为apply() 已忽略返回值

你不必担心Android组件的生命周期和它们的性能 与写入磁盘的apply()的交互。该框架确保 在切换状态之前,从apply()进行的正在运行的磁盘写入已完成


最好使用editor.apply()异步执行提交
getSharedPreferences("FILE_NAME", 0 /*FILE_MODE*/)
     .edit()
     .putString("password", "new value")
     .apply();