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

如何将List<Double>存储至Room数据库?自定义TypeConverter不生效如何解决?

问题原因及解决方案

你遇到的报错是Room无法识别双向类型转换逻辑导致的,核心原因及对应修复方案如下:

  • 最直接的问题是反序列化方法缺少@TypeConverter注解:Room要求序列化、反序列化两个方向的转换方法都必须添加@TypeConverter注解才会被识别,你当前只给了fromDoubleList(List转String)方法加了注解,负责String转回List的fromString方法没有加注解,Room读取数据时找不到对应的转换逻辑,就会抛出该错误。
  • 检查注解导包是否正确:确认Converters类和数据库类中的@TypeConverter、@TypeConverters注解导入的是androidx.room包下的类,若误导入其他包的同名注解也会导致不生效。
  • 检查实体类字段匹配性:确认MarketUnit类中对应的字段类型是List<Double>,泛型和转换器逻辑完全匹配,若泛型为其他类型(比如List<Number>、List<Float>)也会触发不匹配报错。
  • 清理构建缓存:如果上述配置都正确,执行Android Studio的 Build -> Clean Project 再执行 Rebuild Project,Room注解处理器的缓存可能会导致新增的转换器未被识别。

修正后的转换器代码

public class Converters {

    @TypeConverter
    public static String fromDoubleList(List<Double> doubleList){
        Gson gson = new Gson();
        return gson.toJson(doubleList);
    }

    // 补充缺失的@TypeConverter注解
    @TypeConverter
    public static List<Double> fromString(String value){
        Type listType = new TypeToken<List<Double>>(){}.getType();
        return new Gson().fromJson(value, listType);
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 22:15:04