【问题标题】:Type converter for Room Database not working on class which has object from another class房间数据库的类型转换器不适用于具有来自另一个类的对象的类
【发布时间】:2021-01-19 09:10:33
【问题描述】:

我有以下课程:

@Entity(tableName = "dutyday_table")
data class DutyDay(
@PrimaryKey
val date: Date,
val showTime: Time,
val  closingTime:Time
)

以及另一个使用“DutyDay”类对象的类:

@Entity(tableName = "tour_table")
data class Tour(
@PrimaryKey
val day1: DutyDay?,
val day2: DutyDay?,
val day3: DutyDay?,
val day4: DutyDay?,
val day5: DutyDay?,
val day6: DutyDay?,
val day7: DutyDay?,
val totalHours: Time
)

以及以下转换器:

class Converters {
@TypeConverter
fun longToDate(value: Long?): Date? {
    return value?.let { Date(it) }
}

@TypeConverter
fun dateToLong(date: Date?): Long? {
    return date?.time
}

@TypeConverter
fun longToTime(value: Long?): Time? {
    return value?.let { Time(it) }
}

@TypeConverter
fun timeToLong(date: Time?): Long? {
    return date?.time
}
}

转换器已在数据库中正确注释,我已经使用了 Room Database 和转换器,然后它们才能正常工作。但是对于这个例子,Android Studio 抱怨它无法弄清楚如何存储“Tour”类中的字段,我猜是因为它使用了“DutyDay”类中创建的 DutyDays。我是否必须以某种方式为“Tour”中的属性创建另一个转换器?

感谢您的帮助。

【问题讨论】:

    标签: android kotlin android-room converters


    【解决方案1】:

    您的实体中有 3 个对象对于 Room 是未知的 - DateTimeDutyDay。您只为DateTime 描述了TypeConverter,所以问题是Room 不知道如何持久化DutyDay

    我认为你的选择是:

    1. DutyDay 再添加一个转换器(例如,使用Gson 转换为字符串。Here 是与类似决定的链接)。
    2. Tour 表中使用外键而不是DutyDay 的引用。

    【讨论】:

      猜你喜欢
      • 2023-03-29
      • 2020-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-25
      相关资源
      最近更新 更多