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

