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

问题描述

文件犯罪.kt

@Entity
data class Crime (@PrimaryKey val id: UUID = UUID.randomUUID(),
                  var title: String = "",
                  var date: Date = Date(),
                  var isSolved: Boolean = false)

文件犯罪类型转换器.kt

class CrimeTypeConverters {
    @TypeConverter
    fun fromDate(date: Date?): Long?{
        return date?.time
    }

    @TypeConverter
    fun toDate(millisSinceEpoch: Long?): Date? {
        return millisSinceEpoch?.let {
            Date(it)
        }
    }

    @TypeConverter
    fun toUUID(uuid: String?): UUID? {
        return UUID.fromString(uuid)
    }

    @TypeConverter
    fun fromUUID(uuid: UUID?): String? {
        return uuid?.toString()
    }
}

错误:错误:无法弄清楚如何将此字段保存到数据库中。您可以考虑为其添加类型转换器。私有 java.util.Date 日期;C:\Users\ASUS\AndroidStudioProjects\CriminalIntentv2\app\build\tmp\kapt3\stubs\debug\com\bignerdranch\android\criminalintent\database\CrimeDatabase.java:8:警告:未向注释提供架构导出目录处理器,因此我们无法导出架构。您可以提供room.schemaLocation注释处理器参数或将 exportSchema 设置为 false。public abstract class CrimeDatabase extends androidx.room.RoomDatabase { ^[WARN] 请求增量注释处理,但由于以下处理器不是增量的,支持被禁用:androidx.room.RoomProcessor (NON_INCREMENTAL)。

任务 :app:kaptDebugKotlin 失败

标签: androidkotlin

解决方案


您是否将转换器与数据库链接

@Database(
    entities = [
        Crime::class, ...
    ]
)
@TypeConverters(
    //...
    CrimeTypeConverters::class
)
abstract class CrimeDatabase : RoomDatabase() {
   //...
}

您可以查看文档,有一种方法可以逐个在实体上使用它,但我现在找不到参考。

我认为说明问题的关键字是:

...Cannot figure out how to save this field into database. You can consider adding a type converter for it. ...\CrimeDatabase.java:8: warning: Schema export directory is not provided to the annotation processor...

推荐阅读