kotlin - Room Database:如何嵌入具有 ArrayList 字段的对象模型?
问题描述
我有这样的模型
@Entity(tableName = "user_table")
class UserModel
: Serializable {
@PrimaryKey
@NonNull
var userId: String = ""
@Embedded
var location: LocationModel = LocationModel()
...
}
data class LocationModel(
var city : String = "",
var province : String = "",
@TypeConverters(ConvertersDAO::class)
var coordinates : ArrayList<Double> = ArrayList()
)
}
和一个 ConvertersDAO 类
class ConvertersDAO {
@TypeConverter
fun fromStringDouble(value: String?): ArrayList<Double>? {
val listType: Type = object : TypeToken<ArrayList<Double>>() {}.type
return Gson().fromJson(value, listType)
}
@TypeConverter
fun fromArrayListDouble(list: ArrayList<Double>?): String? {
val gson = Gson()
return gson.toJson(list)
}
}
但是当我构建应用程序时出现此错误
error: Cannot figure out how to save this field into database. You can consider adding a type converter for it.
private java.util.ArrayList<java.lang.Double> coordinates;
我尝试将@TypeConverter 放在位置上,但我仍然无法工作,我该怎么办?祝大家拥有美好的一天!
解决方案
您可以将 @TypeConverters(ConvertersDAO::class) 放在:-
级别(该数据库中的@Database
所有 Daos 和 Entities 都可以使用它。),例如
@Database(entities = [UserModel::class],version = 1)
@TypeConverters(ConvertersDAO::class)
在@Entity
级别(实体的所有字段都可以使用它)例如
@Entity(tableName = "user_table")
@TypeConverters(ConvertersDAO::class)
并且您应该能够在@Entity's member/field
级别上对其进行编码,例如
@Embedded
@TypeConverters(ConvertersDAO::class)
var location: LocationModel = LocationModel()
- 测试时,上述所有编译成功。
见https://developer.android.com/reference/androidx/room/TypeConverters
推荐阅读
- reactjs - 当 AppBar 和内容组件不在同一个组件中时,如何使用持久/永久抽屉组件?
- c# - 错误 cs0246 找不到类型或命名空间
- android - 应该恰好有一项具有 [DropdownButton] 的值:0。检测到 0 个或 2 个或多个具有相同值的 [DropdownMenuItem]
- emacs - Emacs:在“find-name-dired”结果缓冲区中进行正则表达式查询替换时,如何匹配换行符?
- azure-keyvault - 如何找出 Azure KeyVault AccessPolicy 更改
- r - 1970 年之前日期的 fasttime 返回 NA
- aframe - 如何在 A-Frame 中自动行走?
- r - 如何查找所有环境 (R) 中的内存使用情况?
- python - 箱线图中的多种传单颜色
- regex - 使用正则表达式通过 sftp 放置文件