Android Kotlin存储SharedPreferences键值对失效问题求助
我尝试用Android Kotlin实现应用数据持久化,写了一个读写键值对的简单示例,代码放在Activity的onCreate()方法里。执行流程是:先调用getPref()读到默认值"no_name",再调用setPref()写入"Elvis",最后再次调用getPref()却还是读到"no_name",没得到预期的"Elvis"。
我的代码如下:
val sharedPrefFile = "MyPrefFile" val sharedPreferences: SharedPreferences = this.getSharedPreferences(sharedPrefFile, Context.MODE_PRIVATE) fun setPref() { val editor = sharedPreferences.edit() val myName = "Elvis" editor.putString("nameFirst_key", myName) } fun getPref() { val myName = sharedPreferences.getString("nameFirst_key", "no_name") } getPref() setPref() getPref()
你的代码存在两个关键问题:
写入操作未提交:在
setPref()方法中,你创建了SharedPreferences.Editor并调用putString()后,没有执行提交操作。SharedPreferences的编辑操作必须通过commit()或apply()才能真正写入到存储中。commit()是同步提交,返回布尔值表示操作是否成功;apply()是异步提交,无返回值,适合大多数场景。修改后的
setPref()方法:fun setPref() { val editor = sharedPreferences.edit() val myName = "Elvis" editor.putString("nameFirst_key", myName) editor.apply() // 或使用 editor.commit() }读取方法未暴露结果:
getPref()方法仅获取了值,但未返回该值或进行输出,导致你无法确认第二次读取的结果。可以修改方法来返回值或打印日志:fun getPref(): String? { val myName = sharedPreferences.getString("nameFirst_key", "no_name") Log.d("SharedPrefTest", "读取到的名字:$myName") return myName }
完成上述修改后,再次执行代码,第二次调用getPref()就能读取到预期的"Elvis"了。
内容的提问来源于stack exchange,提问作者garrettb
相关产品推荐
相关产品推荐

