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

添加TypeConverter后仍无法在Room数据库存储Int列表问题求助

问题排查与修复方案

核心错误点1:类型转换器反序列化方法参数类型错误

你的IntTypeConverter中负责将数据库存储值转回List<Int>的方法参数类型完全错误:Room将列表序列化为String类型存入数据库,反序列化时需要的输入参数是数据库中存储的String,而非List<Int>,Room无法匹配到符合要求的转换器,因此抛出找不到存储方式的错误。

核心错误点2:反序列化逻辑错误

原反序列化方法中调用list.toString()解析的逻辑本身也是错误的,直接使用传入的String类型的序列化结果解析即可。


修正后的IntTypeConverter代码

class IntTypeConverter {
    @TypeConverter
    fun saveIntList(list: List<Int>?): String? {
        // 处理空列表的情况
        return if (list.isNullOrEmpty()) null else Gson().toJson(list)
    }

    @TypeConverter
    fun getIntList(jsonStr: String?): List<Int> {
        // 处理空字符串/ null的情况,直接返回空列表
        return if (jsonStr.isNullOrBlank()) {
            emptyList()
        } else {
            Gson().fromJson(
                jsonStr,
                object : TypeToken<List<Int>>() {}.type
            )
        }
    }
}

附加优化建议

  1. 你已经在Db数据库类上添加了全局@TypeConverters注解,实体类字段上的@field:TypeConverters注解可以省略,不会影响功能。
  2. 修改完成后请先执行Clean Project再重新编译,清除Room注解处理器之前生成的错误缓存代码。
  3. 请同步检查LongTypeConverter是否存在同样的反序列化方法参数类型错误,如有问题参照上述方案一并修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 22:24:03