android - 如何将 Room TypeConverter 应用于实体的单个字段?
问题描述
我一直在尝试将 aTypeConverter
应用于 Room 数据库实体的单个字段的不同解决方案,但出现错误
Cannot figure out how to save this field into database. You can consider adding a type converter for it.
当我将转换器应用于这样的实体时:
@Entity(tableName = DBKey.calendarDayTable)
@TypeConverters(DateStringConverter::class)
data class CalendarDay(
@PrimaryKey
val date: Date
)
一切都按预期工作,但是当我将它应用到这样的领域时:
@Entity(tableName = DBKey.calendarDayTable)
data class CalendarDay(
@PrimaryKey
@TypeConverters(DateStringConverter::class)
val date: Date
)
我收到上面提到的错误。
DateStringConverter
课程是:
class DateStringConverter {
private val formatter = SimpleDateFormat("yyyy-MM-dd")
@TypeConverter
fun dateFromString(value: String): Date {
return formatter.parse(value)!!
}
@TypeConverter
fun dateToString(date: Date): String {
return formatter.format(date)
}
}
我正在使用 Room 版本2.2.5
并在 Kotlin 中编写应用程序。Room 的依赖项是:
implementation "androidx.room:room-runtime:$room_version"
kapt "androidx.room:room-compiler:$room_version"
implementation "androidx.room:room-ktx:$room_version"
有没有一种方法可以DateStringConverter
仅应用于实体的date
字段CalendarDay
,还是必须将其应用于整个实体?
解决方案
您必须指定应将注释应用于该字段
@field:TypeConverters(DateStringConverter::class)
val date: Date
如果您不指定使用站点目标,则根据正在使用的注释的@Target 注释选择目标。如果有多个适用目标,则使用以下列表中的第一个适用目标:
- 参数(构造函数参数);
- 财产;
- 场地。
https://kotlinlang.org/docs/reference/annotations.html#annotation-use-site-targets
推荐阅读
- python - 使用 Python 连接到 PSQL 数据库
- c# - C#中的字符串引用
- c# - 文件上传在本地工作,但不在服务器上
- cisco - 使用 trex 测试 vpp 性能,memif 无法连接
- python - 在 Python 中跳过数据类型错误的行
- javascript - 使用 Javascript 禁用特定复选框
- python - 有什么办法可以将图片添加到我的 QTextEdit 中吗?
- webserver - 为 Windows 选择 Web 服务器以运行 Angular 应用程序
- reactjs - Ant 设计中的 React 和 ExpandedRow 渲染
- javascript - 使用 Webpack 创建 CSS 变量