在多个字段上使用 Room 的类型转换器

Use Room's TypeConverters on multiple fields

我目前正在开发一个小型 Android 应用程序,但我遇到了在两个字段上使用相同 TypeConverters 的问题。 这是我拥有的字段:

@TypeConverters(DateConverters::class)
@NonNull
@ColumnInfo(name = "create_date")
var createDate: Date

@TypeConverters(DateConverters::class)
@NonNull
@ColumnInfo(name = "update_date")
var updateDate: Date

create_dateupdate_date 都是我模型 class 中的 Date 个对象,但它们作为 String 存储在数据库中。为此,我创建了一个 DateConverters class :

object DateConverters {
    @TypeConverter
    fun toDate(value: String): Date {
        val simpleDateFormat = SimpleDateFormat(PATTERN, Locale.getDefault())
        return simpleDateFormat.parse(value)
    }

    @TypeConverter
    fun toString(value: Date): String {
        val simpleDateFormat = SimpleDateFormat(PATTERN, Locale.getDefault())
        return simpleDateFormat.format(value)
    }
}

但是当我尝试 运行 我的应用程序时,我必须遵循以下错误消息:

error: DateConverters() has private access in DateConverters

我也补充一下,我之前只有一个create_date字段,我在应用程序上没有问题运行。

你能告诉我我做错了什么吗?

提前致谢!

似乎问题出在使用 object 而不是 class 或转换器的方法名称中。 我建议您按以下方式重写 DateConverters

class DateConverters {
    @TypeConverter
    fun fromString(value: String): Date {
        val simpleDateFormat = SimpleDateFormat(PATTERN, Locale.getDefault())
        return simpleDateFormat.parse(value)
    }

    @TypeConverter
    fun dateToString(value: Date): String {
        val simpleDateFormat = SimpleDateFormat(PATTERN, Locale.getDefault())
        return simpleDateFormat.format(value)
    }
}

此外,我建议您将值存储为 Long 而不是 samples 中描述的 String,然后在非数据级别使用 SimpleDateFormat