Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 房间数据库的类型转换器不在具有另一个类的对象的类上工作_Android_Kotlin_Android Room_Converters - Fatal编程技术网

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
    }
    }