在多个字段上使用Room的TypeConverters

时间:2019-03-03 15:02:05

标签: android kotlin android-room kotlin-android-extensions typeconverter

我目前正在开发一个小型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都是我模型类中的Date个对象,但是它们以String的形式存储在数据库中。为此,我创建了一个DateConverters类:

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字段,并且在应用程序运行上没有问题。

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

提前谢谢!

1 个答案:

答案 0 :(得分:1)

问题似乎出在使用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)
    }
}

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