【问题标题】:Room library Typeconverter not working in Kotlin房间库类型转换器在 Kotlin 中不起作用
【发布时间】:2020-02-01 01:13:04
【问题描述】:

我正在尝试实现TypeConverter,但我得到了 这个错误:

无法弄清楚如何将此字段保存到数据库中。您可以考虑为其添加类型转换器。

这个数据类:

@Entity
data class SubEmergencyData (

    @PrimaryKey
    var title: String,

    @ColumnInfo (name = "image")
    var image: String,

    @TypeConverters(StepsConverters::class)
    @ColumnInfo (name = "steps")
    var steps: ArrayList<Stepdata>
) {

}

这是我的 TypeConverter:

class StepsConverters {

    @TypeConverter
    fun toStepDataList(optionValuesString: String?): ArrayList<Stepdata>? {
        if (optionValuesString == null) {
            return null
        }
        val gson = Gson()
        val type = object : TypeToken<ArrayList<Stepdata?>?>() {}.type
        return gson.fromJson<ArrayList<Stepdata>>(optionValuesString, type)
    }

    @TypeConverter
    fun fromStepData(optionValues: ArrayList<Stepdata?>?): String? {
        if (optionValues == null) {
            return null
        }
        val gson = Gson()
        return gson.toJson(optionValues)
    }
}

这是步骤数据

@Entity
data class Stepdata (@PrimaryKey var num : Int,
                     @ColumnInfo (name = "title") var title: String,
                     @ColumnInfo (name = "content") var content : String,
                     @ColumnInfo (name = "image")var image: String) {
}

【问题讨论】:

  • Stepdata 有什么相似之处?

标签: android kotlin android-room


【解决方案1】:

ArrayList&lt;Stepdata&gt; 存储为String 无法查询,只能通过SubEmergencyData 访问。如果此数据应该是可查询的,请使用one-to-many 关系。

【讨论】:

  • 我刚试了,还是出现同样的错误,能否给我举个例子?
  • 您不必将@Entity 标记为您想成为@Embedded 的课程。此外,您不能@Embedded 一个列表。它必须是一个简单的类,就像您在链接中提供的示例一样。
【解决方案2】:

我想是因为你在fun fromStepData 中写了ArrayList&lt;Stepdata?&gt;?。尝试将ArrayList&lt;Stepdata?&gt;? 更改为ArrayList&lt;Stepdata&gt;?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多