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

Android Studio中Kotlin类型转换器:List与String互转空值问题

解决List与String转换时的空指针问题

你遇到的错误本质是当jsonStringToList方法的value参数为null时,Gson().fromJson返回null,随后调用toList()触发空指针异常。以下是具体的修复方案:

核心修复:处理空参数与空返回值

修改你的Converters类,在转换前先判断参数是否为空,同时确保转换结果不会为null:

class Converters {
    // 复用Gson实例,避免重复创建
    private val gson = Gson()

    @TypeConverter
    fun listToJsonString(value: List<String>?): String? = gson.toJson(value)

    @TypeConverter
    fun jsonStringToList(value: String?): List<String> {
        // 参数为空直接返回空列表
        if (value == null) {
            return emptyList()
        }
        // 转换后若结果为null,也返回空列表兜底
        return gson.fromJson(value, Array<String>::class.java)?.toList() ?: emptyList()
    }
}

适配实体类的字段可空性

注意到你的Results实体类中:

  • category是不可空的List<String>,所以转换器必须返回非空列表,不能返回null,否则实体初始化会失败;
  • 其他如country、creator等是可空的List<String>?,如果你希望这些字段在数据库为空时返回null而非空列表,可以修改转换器的返回类型和逻辑:
@TypeConverter
fun jsonStringToList(value: String?): List<String>? {
    return value?.let {
        gson.fromJson(it, Array<String>::class.java)?.toList()
    }
}

额外优化点

  • 不要每次转换都新建Gson实例,创建一个类内的单例可以提升性能;
  • 如果需要处理特殊的JSON格式(比如空数组、特殊字符),可以给Gson添加自定义配置,比如GsonBuilder().serializeNulls().create()。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 23:30:10