Java Kotlin:ObjectBox和kotlinx的组合实体类。序列化冲突?
我使用它来解析来自API的JSON,并将其作为本地存储 这两个库都允许构造模型或实体类。我希望避免冗余类,并且更愿意将它们组合成一个实体类 在我不得不补充之前,它工作得很好 我想接受API中的所有内容,这就是为什么每个字段都是可选的。验证在实体的Java Kotlin:ObjectBox和kotlinx的组合实体类。序列化冲突?,java,android,kotlin,objectbox,Java,Android,Kotlin,Objectbox,我使用它来解析来自API的JSON,并将其作为本地存储 这两个库都允许构造模型或实体类。我希望避免冗余类,并且更愿意将它们组合成一个实体类 在我不得不补充之前,它工作得很好 我想接受API中的所有内容,这就是为什么每个字段都是可选的。验证在实体的ObjectBox部分进行 下面您可以找到所需的代码,但该代码不起作用 第一个问题:@可选字段需要有默认值。添加?=空(感觉很脏),我到了 第二个问题:解析和存储后,出现以下错误: java.lang.NoSuchMethodError:Lkotlinx
ObjectBox
部分进行
下面您可以找到所需的代码,但该代码不起作用
第一个问题:@可选
字段需要有默认值。添加?=空
(感觉很脏),我到了
第二个问题:解析和存储后,出现以下错误:
java.lang.NoSuchMethodError:Lkotlinx/serialization/ContextSerializer类中没有直接方法(Lkotlin/reflect/KClass;Lkotlinx/serialization/KSerializer;);或其超类(声明'kotlinx.serialization.ContextSerializer'出现在/data/app/com.acme.myapp2A1fXerVu==/split_lib_dependencies_apk.apk中)
实体:AppleTree
@Entity // ObjectBox
@Serializable // Serializable
data class AppleTree(
@Optional // Serializable
@Id(assignable=true) // ObjectBox
var id: Long = 0,
@Optional // Serializable
@Backlink // ObjectBox
var apples: ToMany<Apple>
)
@Entity
@Serializable
data class Apple(
@Optional // Serializable
@Id(assignable=true) // ObjectBox
var id: Long = 0,
@Optional // Serializable
var tree: ToOne<AppleTree>
)
private fun fetch() {
doAsync {
var json = mapKeys(URL(myURL).readText()) // fetch JSON from API
uiThread {
val appleTree = JSON.nonstrict.parse<AppleTree>(json) // parse JSON
val appleTreeBox = (application as App).getAppleTreeBox() // get ObjectBox
appleTreeBox.put(appleTree) // save
}
}
}
@Entity//ObjectBox
@可序列化//可序列化
数据类AppleTree(
@可选//可序列化
@Id(assignable=true)//ObjectBox
变量id:Long=0,
@可选//可序列化
@反向链接//对象框
苹果:番茄
)
实体:苹果
@Entity // ObjectBox
@Serializable // Serializable
data class AppleTree(
@Optional // Serializable
@Id(assignable=true) // ObjectBox
var id: Long = 0,
@Optional // Serializable
@Backlink // ObjectBox
var apples: ToMany<Apple>
)
@Entity
@Serializable
data class Apple(
@Optional // Serializable
@Id(assignable=true) // ObjectBox
var id: Long = 0,
@Optional // Serializable
var tree: ToOne<AppleTree>
)
private fun fetch() {
doAsync {
var json = mapKeys(URL(myURL).readText()) // fetch JSON from API
uiThread {
val appleTree = JSON.nonstrict.parse<AppleTree>(json) // parse JSON
val appleTreeBox = (application as App).getAppleTreeBox() // get ObjectBox
appleTreeBox.put(appleTree) // save
}
}
}
@实体
@可序列化
数据类苹果(
@可选//可序列化
@Id(assignable=true)//ObjectBox
变量id:Long=0,
@可选//可序列化
变量树:ToOne
)
提取和存储
@Entity // ObjectBox
@Serializable // Serializable
data class AppleTree(
@Optional // Serializable
@Id(assignable=true) // ObjectBox
var id: Long = 0,
@Optional // Serializable
@Backlink // ObjectBox
var apples: ToMany<Apple>
)
@Entity
@Serializable
data class Apple(
@Optional // Serializable
@Id(assignable=true) // ObjectBox
var id: Long = 0,
@Optional // Serializable
var tree: ToOne<AppleTree>
)
private fun fetch() {
doAsync {
var json = mapKeys(URL(myURL).readText()) // fetch JSON from API
uiThread {
val appleTree = JSON.nonstrict.parse<AppleTree>(json) // parse JSON
val appleTreeBox = (application as App).getAppleTreeBox() // get ObjectBox
appleTreeBox.put(appleTree) // save
}
}
}
private fun fetch(){
doAsync{
var json=mapKeys(URL(myURL).readText())//从API获取json
超线程{
val appleTree=JSON.nonstrict.parse(JSON)//解析JSON
val appleTreeBox=(应用程序作为应用程序)。getAppleTreeBox()//get ObjectBox
appleTreeBox.put(appleTree)//保存
}
}
}
有什么想法吗
提前谢谢你 我无法找到没有冲突的组合解决方案,因此我决定拆分模型:
我从改造中获取数据后创建ObjectBox实体。冗余有点太多,但它可以工作。:-) 我刚刚看到了这个解决方案,并写了一篇文章,介绍了如何在不映射实体的情况下实现这一点 我希望这可能对您有所帮助->