Laz*_*zar 3 android kotlin android-room
我一直在尝试不同的解决方案来将 a 应用于TypeConverterRoom 数据库实体的单个字段,但出现错误
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
)
Run Code Online (Sandbox Code Playgroud)
一切都按预期进行,但是当我将其应用到这样的领域时:
@Entity(tableName = DBKey.calendarDayTable)
data class CalendarDay(
@PrimaryKey
@TypeConverters(DateStringConverter::class)
val date: Date
)
Run Code Online (Sandbox Code Playgroud)
我收到上面提到的错误。
班级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)
}
}
Run Code Online (Sandbox Code Playgroud)
我正在使用 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"
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以DateStringConverter只应用于实体date的领域CalendarDay,或者我必须将其应用于整个实体?
您必须指定注释应应用于该字段
@field:TypeConverters(DateStringConverter::class)
val date: Date
Run Code Online (Sandbox Code Playgroud)
如果您未指定使用站点目标,则根据正在使用的注释的 @Target 注释来选择目标。如果有多个适用目标,则使用以下列表中的第一个适用目标:
- param(构造函数参数);
- 财产;
- 场地。
https://kotlinlang.org/docs/reference/annotations.html#annotation-use-site-targets