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

Kotlin类型不匹配报错inferred type is String? but String was expected如何解决

Kotlin Android SharedPreferences 类型不匹配报错解决方案

错误原因

e: C:\Users\bagji\MyApplication7\app\src\main\java\com\example\myapplication\AppSettings.kt: (39, 16): Type mismatch: inferred type is String? but String was expected
该报错由Android系统SharedPreferences的API特性导致:getString()方法的返回值被标记为可空类型String?,即使你传入了非空的默认值,SDK层面的方法定义仍然会返回可空类型,和你代码中要求的非空String返回类型不匹配。

修复方案

你可以选择任意一种方案修改涉及getString调用的两个方法即可:

方案1:非空断言(实现最简单)

因为你已经传入了明确的非空默认值,不可能出现空值,直接加!!断言非空即可:

fun getSettingAsString(context: Context, key: String): String {
    return getPrefs(context).getString(key, "")!!
}

fun getSettingList(context: Context, key: String): JSONObject{
    return JSONObject(getPrefs(context).getString(key, JSONObject().toString())!!)
}

方案2:Elvis运算符兜底(稳定性更高)

如果要避免极端场景下的异常,可加兜底逻辑:

fun getSettingAsString(context: Context, key: String): String {
    return getPrefs(context).getString(key, "") ?: ""
}

fun getSettingList(context: Context, key: String): JSONObject{
    val jsonStr = getPrefs(context).getString(key, JSONObject().toString()) ?: JSONObject().toString()
    return JSONObject(jsonStr)
}

错误截图

错误截图

内容的提问来源于stack exchange,提问作者피아노

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 10:36:05