Android Kotlin中如何在Fragment里用SharedPreferences获取字符串?
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
相关产品推荐
相关产品推荐

