Android 开发问题:SharedPreferences 的 getString 方法返回值类型 Type mismatch 问题

kotlin 复制代码
fun getString(context: Context, fileName: String, key: String): String {
    val sharedPreferences = context.getSharedPreferences(fileName, Context.MODE_PRIVATE)
    return sharedPreferences.getString(key, "")
}
  • 在 Android 开发中,上述代码报如下错误信息

    Type mismatch.

问题原因
  1. 在 Kotlin 中,SharedPreferences 的 SharedPreferences 方法返回的是可空字符串 String?

  2. 而函数声明返回的是非空字符串 String,因此会报 Type mismatch 错误

处理策略
  1. 返回非空字符串(推荐):使用 ?: 提供默认值,确保返回值非空
kotlin 复制代码
fun getString(context: Context, fileName: String, key: String): String {
    val sharedPreferences = context.getSharedPreferences(fileName, Context.MODE_PRIVATE)
    return sharedPreferences.getString(key, "") ?: ""
}
  1. 返回可空字符串,修改函数返回值类型为 String?
kotlin 复制代码
fun getString(context: Context, fileName: String, key: String): String? {
    val sharedPreferences = context.getSharedPreferences(fileName, Context.MODE_PRIVATE)
    return sharedPreferences.getString(key, "")
}
  1. 使用扩展函数:为 SharedPreferences 添加扩展函数,避免重复处理空值
kotlin 复制代码
private fun SharedPreferences.getStringNonNull(key: String, defValue: String = ""): String {
    return getString(key, defValue) ?: defValue
}
kotlin 复制代码
fun getString(context: Context, fileName: String, key: String): String {
    val sharedPreferences = context.getSharedPreferences(fileName, Context.MODE_PRIVATE)
    return sharedPreferences.getStringNonNull(key)
}
  1. 强制转换:明确告诉编译器这里不会为 null
kotlin 复制代码
fun getString(context: Context, fileName: String, key: String): String {
    val sharedPreferences = context.getSharedPreferences(fileName, Context.MODE_PRIVATE)
    return sharedPreferences.getString(key, "")!!
}
kotlin 复制代码
return sharedPreferences.getString(key, "")
补充学习
  1. 在上述代码中,如果 key 不存在,确实会返回默认值空字符串 "",而不会返回 null

  2. 但 Kotlin 编译器仍然会报 Type mismatch 错误,这是由方法签名决定的,getString 方法的方法签名如下

kotlin 复制代码
abstract fun getString(
    key: String!, 
    defValue: String?
): String?
相关推荐
我命由我123452 小时前
Android Studio - Android Studio 自定义预览尺寸
android·java·ide·java-ee·android studio·android-studio·android runtime
咖啡八杯3 小时前
GoF设计模式——迭代器模式
java·后端·设计模式·迭代器模式
AIGS0014 小时前
企业AI落地的关键认知:向量空间JBoltAI的本体语义平台
java·人工智能·人工智能ai大模型应用
KaMeidebaby5 小时前
卡梅德生物技术快报|抗体亲和力成熟工业化调控新机制:差异性浆细胞增殖工艺优化思路
java·开发语言·人工智能·算法·机器学习·架构·spark
取个名字太难了~5 小时前
越用越便宜,越用越强大:影像 SDK 的边际成本递减与网络效应实践
android·数码相机·美颜·相机连接·demu
醉城夜风~6 小时前
Java详解经典算法题:接雨水(三种实现方案+原理剖析)
java·开发语言·算法
CHNE_TAO_EMSM6 小时前
Android studio 打开文件时自动下载源码
前端·javascript·android studio
数智化转型推荐官7 小时前
2026统一身份管理系统五大发展趋势解读
java·运维·微服务
看菜鸡互7 小时前
探索用 SlideML 让大模型生成 PPT 的实验方法
java·运维
AFinalStone9 小时前
Android 7系统网络(四)Native层(下)—netd Controller详解
android·网络