SharedPreferences不更新值

时间:2019-01-30 06:49:38

标签: android kotlin sharedpreferences

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

我尝试从Timer()更新SharedPreference值。 我尝试在更新commit()的值后使用apply()SharedPreference.Editor,但它不会更新值。在for循环的每一步中,我都会向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添加另一个值时,我得到了想要的结果,但是第二次都一样。

1 个答案:

答案 0 :(得分:0)

尝试一下 sharedPreferences.edit()。putStringSet(“ protocols”,协议).apply();

您正在申请参考变量