请帮我弄清楚如何在 Room 中工作,List<MyClass>
我有一个大型 JSON,分为 30 多个嵌套类。
我从互联网收集数据。一切都很完美。
我正在尝试将此数据写入 Room。
为了将嵌套类写入数据库,我在它们上使用注释@Embedded
但在某些类中,我的参数不仅来自类实例,还来自数组
@SerializedName("availableSegments")
var availableSegments: List<AvailableSegment>
如果我尝试挂@Embedded
在这样的参数上,它会给出一个错误
Entities and POJOs must have a usable public constructor. You can have an empty constructor or a constructor whose parameters match the fields (by name and type).
类本身AvailableSegment
包含其他“自定义”参数(不是原始 String、Int 等)。
更新!!!有条件...
我有 3 节课:
@Entity(tableName = "car_table")
data class Car(
@Embedded var zerka: Zerkala,
@Embedded var side: Sidenia,
@PrimaryKey(autoGenerate = true) var primKey: Int = 0
)
data class Zerkala(
var kolvo: Int
)
data class Sidenia(
var color: String
)
像这样 - 一切正常。
但是如果在主类中我将任何参数更改为数组:
@Entity(tableName = "car_table")
data class Car(
@Embedded var zerka: Zerkala,
@Embedded var side: List<Sidenia>,
@PrimaryKey(autoGenerate = true) var primKey: Int = 0
)
没有任何作用...
Entities and POJOs must have a usable public constructor. You can have an empty constructor or a constructor whose parameters match the fields (by name and type). - java.util.ListD:\Program\AndroidProject\TesListRoom\app\build\tmp\kapt3\stubs\debug\by\wlad\koshelev\teslistroom\CarDataBaase.java:7: warning: Schema export directory is not provided to the annotation processor so we cannot export the schema. You can either provide `room.schemaLocation` annotation processor argument OR set exportSchema to false.
如果您无需在其上构建查询就足以存储数据,那么只需对其进行序列化。添加转换器:
并通过 将它们添加到基本房间描述中
@TypeConverters(Converters.class)
。不需要嵌入。如果你想通过一对多,那么通过
@Relation
. 但是随后您将不得不在事务中将具有不同插入的 json 分别保存到每个表中。因此,不应在实体中声明关系,而应在查询中返回的单独类中声明:
在@Dao
ZY 写在编辑窗口,可能有语法错误。