Android 房间数据库的类型转换器不在具有另一个类的对象的类上工作
我有以下课程:Android 房间数据库的类型转换器不在具有另一个类的对象的类上工作,android,kotlin,android-room,converters,Android,Kotlin,Android Room,Converters,我有以下课程: @Entity(tableName = "dutyday_table") data class DutyDay( @PrimaryKey val date: Date, val showTime: Time, val closingTime:Time ) 另一个类使用类“DutyDay”中的对象: 以及以下转换器: class Converters { @TypeConverter fun longToDate(value: Long?): Date? {
@Entity(tableName = "dutyday_table")
data class DutyDay(
@PrimaryKey
val date: Date,
val showTime: Time,
val closingTime:Time
)
另一个类使用类“DutyDay”中的对象:
以及以下转换器:
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数据库和转换器。但在这个例子中,Android Studio抱怨说它无法理解如何存储类“Tour”中的字段,我猜是因为它使用了类“DutyDay”中创建的DutyDays。我是否必须为“Tour”中的属性创建另一个转换器
感谢您的帮助。您的实体中有3个对象在房间中是未知的-
日期
,时间
,工作日
。您描述的TypeConverter仅适用于日期
和时间
,因此问题在于房间不知道如何保持工作日
我认为你的选择是:
DutyDay
再添加一个转换器(例如,使用Gson转换为字符串。是具有类似决策的链接)Tour
表中使用外键,而不是DutyDay
的引用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
}
}