You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Kotlin存储SharedPreferences键值对失效问题求助

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 22:19:24