在多个字段上使用 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_date
和 update_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
。
我目前正在开发一个小型 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_date
和 update_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
。