数据库类
@Entity
data class ObjectEntity(
val active: Boolean,
val comment: String?,
@PrimaryKey(autoGenerate = false)
val id: Long,
val folderId: Long,
val imei: String?,
val name: String?,
@TypeConverters(ObjectSettingsTypeConvert::class)
var settings: List<ObjectSetting>? ,
val stateNumber: String?,
val typeId: Long
)
data class ObjectSetting(
val id: Long,
val name: String?,
val type: Int
)
有一个转换器
class ObjectSettingsTypeConvert {
private val gson: Gson by lazy { Gson() }
@TypeConverter
fun fromList(value: List<ObjectSetting>): String? {
return if (!value.isNullOrEmpty())
gson.toJson(value)
else
null
}
@TypeConverter
fun toList(value: String?): List<ObjectSetting>? {
if (value.isNullOrEmpty()) return null
val arrayTutorialType = object : TypeToken<List<ObjectSetting>>() {}.type
return gson.fromJson(value, arrayTutorialType) as List<ObjectSetting>
}
}
有一个错误:
E:\SOURCE\android\appproject-android-app\app\build\tmp\kapt3\stubs\debug\ru\mydomain\appproject\data\db\model\ObjectEntity.java:19:错误:无法弄清楚如何将此字段保存到数据库中。您可以考虑为其添加类型转换器。私有 java.util.List 设置;
我看不到什么?怎么了?
您需要指定该字段的注释:
否则,它被添加到错误的位置。
由于在这种情况下注解在构造函数中,因此选择了 param(构造函数参数)而不指定
https://kotlinlang.ru/docs/reference/annotations.html在本节末尾带有指南的注释 https://kotlinlang.org/docs/reference/annotations.html#annotation-use-site-targets