【问题标题】:SharedPreferences not updating values [duplicate]SharedPreferences 不更新值 [重复]
【发布时间】:2019-01-30 06:49:38
【问题描述】:

我在 SharedPreference 中保存了一些字符串值,但它没有更新,我哪里出错了?

我尝试从Timer() 更新 SharedPreference 值。 在更新SharedPreference.Editor 值后,我尝试使用commit()apply(),但它不会更新值。在for 循环的每一步中,我都会向val protocols 添加新值,而val protocols 正在从SharedPreference 获取自己的值

val sharedPreferences = activity!!.getSharedPreferences("session",Context.MODE_PRIVATE)
val protocols = sharedPreferences.getStringSet("protocols",hashSetOf())
Log.d("old protocols",protocols.toString())
Timer().scheduleAtFixedRate(object : TimerTask() {
  override fun run() {    
    Query(context!!).post(url,params,headers,object:ResponseCallBack{
      override fun onSuccess(response: String?) {
        val res = response?.string()
        val document = Jsoup.parse(res)
        val bals = document.select("#newspaper-b tbody tr")

        if(!protocols.containsAll(bals.eachText())) {
           for (bal in bals) {
             val bprotokol = bal.allElements[5].text()
             if (!protocols.contains(bprotokol)) {
               protocols.add(bprotokol)
               notification()
              }
           }
          val editor = sharedPreferences.edit()
          editor.putStringSet("protocols", protocols)
          editor.apply()
          val updatedProtocols = sharedPreferences.getStringSet("protocols",null)
          Log.d("updated protocols",updatedProtocols.toString())
        }
      }
    })
  }
}, 0, 5000)

首先Log.d("old protocols") 输出是{protocols=[MMX6859280]} 第一次打开应用程序没问题。在for loop 中有两个值MMX6859280MMX6859281。 第二个Log.d("updated protocols") 输出是{protocols=[MMX6859280,MMX6859281]},也可以。但是当关闭应用程序并再次打开时,我希望首先Log.d 输出{protocols=[MMX6859280,MMX6859281]} 但它返回{protocols=[MMX6859280]},因此它不会更新值。奇怪的情况是,当我通过这次更新向SharedPreference 添加另一个值时,我得到了我想要的结果,但第二次都是一样的。

【问题讨论】:

  • 您不能修改getStringSet() 返回的Set,然后再写回相同的对象。您需要先创建一个新的 Set 对象,对其进行修改,然后将新对象保存回去。这有点棘手,而且肯定不明显,除非您碰巧阅读了该特定方法的文档。
  • 请不要编辑添加 SOLVED 到标题。此外,您不需要在正文中添加链接。它已经在您问题顶部的横幅中。

标签: android kotlin sharedpreferences


【解决方案1】:

试试这个 sharedPreferences.edit().putStringSet("protocols", protocols).apply();

你正在申请引用变量

【讨论】:

  • 它不起作用
  • hashSetOf() 返回什么;我猜 hashSetOf() 返回初始协议?。
  • 我通过创建新的HashSet<String> 来解决解决方案,而不是直接引用
猜你喜欢
  • 2012-04-28
  • 1970-01-01
  • 1970-01-01
  • 2018-08-02
  • 2022-01-23
  • 2014-04-16
  • 1970-01-01
  • 2012-09-19
相关资源
最近更新 更多