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

Room数据库自定义Syllables对象的TypeConverter实现问题

错误原因

你当前的Syllables相关TypeConverter错误原因出在反序列化方法的返回值类型不匹配:Word实体中的syllables字段是单个Syllables?类型,而你写的toSyllables方法把JSON反序列化为Syllables数组再转列表,返回的是List<Syllables>类型,和字段类型不匹配,因此无法生效。

正确的Converter实现

class Converters {

    @TypeConverter
    fun stringListToJson(value: List<String>?) = Gson().toJson(value)

    @TypeConverter
    fun jsonToStringList(value: String) =
        Gson().fromJson(value, Array<String>::class.java).toList()

    // Syllables转JSON字符串,存储到数据库
    @TypeConverter
    fun fromSyllables(value: Syllables?) = Gson().toJson(value)

    // JSON字符串转回单个Syllables对象,匹配实体类字段类型
    @TypeConverter
    fun toSyllables(value: String) =
        Gson().fromJson(value, Syllables::class.java)
}

额外注意事项

  • 必须将该Converter类添加到你的Room数据库类的@TypeConverters注解中才能生效,示例如下:
@Database(entities = [Word::class], version = 1)
@TypeConverters(Converters::class) 
abstract class WordDatabase : RoomDatabase() {
    // 此处定义你的DAO
}
  • 不需要为Syllables内部的count:Int?和list:List<String>?字段单独写转换器,Gson会自动复用已定义的List<String>转换逻辑完成嵌套字段的序列化/反序列化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 19:45:02