我创建了一个使用共享首选项的应用程序,以便用户登录。用户的密码保存在首选项中。我的问题是,如果用户想要更改他/她的密码,如何更改首选项中的密码?
答案 0 :(得分:45)
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();
答案 1 :(得分:5)
$("#TempDataDiv").html($("#chartDiv").html() + $("#chartDiv").html());
var useHeight = $("#chartDiv").prop('scrollHeight');
html2canvas($("#chartDiv"), {
height: useHeight,
onrendered: function(canvas) {
imageData = canvas.toDataURL();
$("#TempDataDiv").html("");
var win = window.open();
win.document.write("<br><img src='" + imageData + "'/>");
win.print();
}
});
代替apply()
建议您使用commit()
代替Editor.apply()
,因为commit()
在后台异步工作,因此不太可能存在ANR,因为那(如果有的话)。
apply()
Docs mention关于getSharedPreferences("FILE_NAME", 0 /*FILE_MODE*/)
.edit()
.putString("password", "new value")
.apply();
,
将您的偏好设置更改从此编辑器返回到 它正在编辑的SharedPreferences对象。这原子地执行 要求修改,替换当前的任何内容 SharedPreferences。
请注意,当两位编辑同时修改首选项时, 最后一个叫申请获胜。
与commit()不同,后者将其首选项写入持久性 同步存储,apply()将其更改提交到内存中 SharedPreferences立即启动异步提交 磁盘,您不会收到任何故障通知。如果是其他编辑 这个SharedPreferences在apply()时执行常规commit() 仍然未完成,commit()将阻塞,直到所有异步提交为止 完成以及提交本身。
由于SharedPreferences实例是一个进程中的单例,它就是 如果你是的话,可以使用apply()替换任何commit()实例 已经忽略了返回值。
您无需担心Android组件的生命周期及其问题 与apply()写入磁盘的交互。框架确保 在切换状态之前,apply()中的飞行中磁盘写入完成。