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

Android Kotlin中如何在Fragment里用SharedPreferences获取字符串?

解决Fragment中SharedPreferences getString返回空的问题

1. 先修正变量名错误

你的代码里存在明显的变量误用问题:

val password = sharedPref?.getString("key", "")
if (key == "") { // 这里错误地判断了字符串"key",而非password变量
  // 即使修改了值也会执行
}

正确写法应该判断password:

val password = sharedPref?.getString("key", "") ?: ""
if (password == "") {
  // 现在会正确判断password是否为空
} else {
  // 处理非空的password
}

2. 检查SharedPreferences的获取一致性

如果修正变量名后仍获取不到值,大概率是保存和读取时用了不同的SharedPreferences实例:

  • activity?.getPreferences(Context.MODE_PRIVATE)获取的是当前Activity专属的SP文件,文件名是Activity的类名。
  • 如果你的设置菜单是用getSharedPreferences("自定义文件名", Context.MODE_PRIVATE)保存的值,Fragment里用getPreferences就会读取到另一个文件,自然拿不到修改后的值。

这种情况下要统一使用指定文件名的方式:
设置菜单里保存值时:

val sharedPref = context.getSharedPreferences("MyAppPrefs", Context.MODE_PRIVATE)
with(sharedPref.edit()) {
  putString("key", "新密码")
  apply() // 必须调用apply()/commit()才会保存修改
}

Fragment里读取时:

val sharedPref = activity?.getSharedPreferences("MyAppPrefs", Context.MODE_PRIVATE) ?: return
val password = sharedPref.getString("key", "") ?: ""
// 后续逻辑

额外注意点

  • 保存值时必须调用apply()或commit(),否则修改不会写入文件。
  • 确保读取和保存时的键名完全一致(包括大小写、拼写)。

内容的提问来源于stack exchange,提问作者UndergroundDev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 11:01:17