android - Android Room - 类型转换器在实体字段范围内不起作用
问题描述
我试图将类型转换器添加到我的实体,但我发现它仅适用于数据库、dao 和实体范围,而不适用于实体字段范围。
例如:当我像这样在实体范围中添加类型转换器时,它工作正常。
@Entity(tableName = "chat_history")
@TypeConverters(ChatEntityConverter::class)
class ChatHistoryEntity (
@PrimaryKey
@NonNull
@ColumnInfo(name = "history_id") val HID: Long?,
@ColumnInfo(name = "history_name") var pairedName: String?,
@ColumnInfo(name = "history_last_message") var lastMessage: String?,
@ColumnInfo(name = "history_last_date")
var lastDate: Date?
)
但是如果我将它移到实体字段范围内,它就无法编译。
@Entity(tableName = "chat_history")
class ChatHistoryEntity (
@PrimaryKey
@NonNull
@ColumnInfo(name = "history_id") val HID: Long?,
@ColumnInfo(name = "history_name") var pairedName: String?,
@ColumnInfo(name = "history_last_message") var lastMessage: String?,
@TypeConverters(ChatEntityConverter::class)
@ColumnInfo(name = "history_last_date")
var lastDate: Date?
)
它显示如下错误消息:
error: Cannot figure out how to save this field into database.
我的转换器是:
class ChatEntityConverter {
@TypeConverter
fun fromTimeStamp(date: Long?): Date? {
return when(date) {
null -> null
else -> Date(date)
}
}
@TypeConverter
fun dateToTimeStamp(date: Date?): Long? {
return when(date) {
null -> null
else -> date.time
}
}
}
由于它还将长类型转换为日期类型,我不希望它在实体范围内工作。仅在日期类型字段范围内。但我就是不能把它放在那里并编译它。
解决方案
@TypeConverters
在一个领域工作。您正在使用 Kotlin,因此您可以更直接地使用属性。要将注释应用于支持字段,请使用@field:TypeConverters
而不是@TypeConverters
.
推荐阅读
- arduino - 是否可以将 libstdc 添加到 arduino-ide
- uwp - UWP 应用与 Windows 10 S 支持不兼容
- reactjs - chrome 扩展(在 React 中构建)和 Web 应用程序(也在 React 中)之间的通信
- c# - C# - 将两个列表连接成一个配对值列表
- javascript - JavaScript:画布触摸事件
- r - 在R中的某些条件下向表中添加行
- sql - 避免使用连接在 SQL 中显示重复记录
- java - Selenium 测试用例在每种情况下都通过了页面上是否存在的元素
- python - 如何使用 REGEX 在长字符串中找到 IP 地址?
- java - 为什么 GATE 与我的阿拉伯语地名词典列表中的单词不匹配?