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
相关产品推荐
相关产品推荐

