在多个字段上使用Room的TypeConverters

问题描述 投票:0回答:1

我目前正在开发一个小型的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字段,我在app运行时没有问题。

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

先感谢您 !

android kotlin android-room kotlin-android-extensions typeconverter
1个回答
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 not string,然后在非数据级别使用SimpleDateFormat

© www.soinside.com 2019 - 2024. All rights reserved.