【问题标题】:How to change values in the shared preference如何更改共享首选项中的值
【发布时间】:2011-06-17 00:05:13
【问题描述】:

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

【问题讨论】:

    标签: java android sharedpreferences


    【解决方案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();
    

    【讨论】:

    • 最好使用 editor.apply() 异步提交
    【解决方案2】:

    使用apply() 而不是commit()

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

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

    Docs mention 关于apply()

    将您的首选项更改从该编辑器提交回 它正在编辑的 SharedPreferences 对象。这原子地执行 请求修改,替换当前在 共享首选项。

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

    与 commit() 不同,它将其偏好写入持久化 同步存储,apply() 将其更改提交到内存中 SharedPreferences 立即但开始异步提交 磁盘,您将不会收到任何故障通知。如果另一个编辑 此 SharedPreferences 执行常规 commit() 而 apply() 是 仍然未完成,commit() 将阻塞,直到所有异步提交都完成 完成以及提交本身。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多