aid*_*ack 8 android android-room
我有一个类似下面的项目列表,我想使用 room.log 输入到数据库中。
data class MyRotasDayItem(
@PrimaryKey
@SerializedName("id")
val id: Long,
@SerializedName("date")
val date: String,
@Embedded
@SerializedName("dayEvents")
val dayEvents: List<SealedObj>
)
Run Code Online (Sandbox Code Playgroud)
但是我似乎无法添加 dayEvents。即使我创建了类型 List 我得到...实体和 POJO 必须有一个可用的公共构造函数我是否必须使用类型转换器?
如果列表中的 Type 是一个包含其他数据对象的 Sealed 类,例如...
sealed class MySealedExample(
open val foo: Long,
open val bar: Long
) {
@PrimaryKey(autoGenerate = true)
var id: Int = 0
@Entity
data class AnExample1(
@Ignore override val foo: Long,
@Ignore override val bar: Long,
val something:String
) : MySealedExample(foo, bar)
@Entity
data class AnExample2(
@Ignore override val foo: Long,
@Ignore override val bar: Long,
val somethingElse:List<SomeObj>
) : MySealedExample(foo, bar)
}
Run Code Online (Sandbox Code Playgroud)
无论如何将其插入数据库?
谢谢
使用类型转换器,我遇到了类似的问题并使用类型转换器修复了它。为了将密封类转换为字符串,反之亦然,我使用了此gist中的 Gson 扩展。
@JvmStatic
@TypeConverter
fun sealedClassToString(sealedClass: SealedClass) : String = GsonExtension.toJson(sealedClass)
@JvmStatic
@TypeConverter
fun sealedClassFromString(sealedClass: String) : SealedClass = sealedClass.let { GsonExtension.fromJson(it) }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1375 次 |
| 最近记录: |