Java Kotlin:ObjectBox和kotlinx的组合实体类。序列化冲突?

Java Kotlin:ObjectBox和kotlinx的组合实体类。序列化冲突?,java,android,kotlin,objectbox,Java,Android,Kotlin,Objectbox,我使用它来解析来自API的JSON,并将其作为本地存储 这两个库都允许构造模型或实体类。我希望避免冗余类,并且更愿意将它们组合成一个实体类 在我不得不补充之前,它工作得很好 我想接受API中的所有内容,这就是为什么每个字段都是可选的。验证在实体的ObjectBox部分进行 下面您可以找到所需的代码,但该代码不起作用 第一个问题:@可选字段需要有默认值。添加?=空(感觉很脏),我到了 第二个问题:解析和存储后,出现以下错误: java.lang.NoSuchMethodError:Lkotlinx

我使用它来解析来自API的JSON,并将其作为本地存储

这两个库都允许构造模型或实体类。我希望避免冗余类,并且更愿意将它们组合成一个实体类

在我不得不补充之前,它工作得很好

我想接受API中的所有内容,这就是为什么每个字段都是可选的。验证在实体的
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)//保存
}
}
}
有什么想法吗


提前谢谢你

我无法找到没有冲突的组合解决方案,因此我决定拆分模型:

  • 每一次API改造要求2
  • 每个ObjectBox实体的模型

  • 我从改造中获取数据后创建ObjectBox实体。冗余有点太多,但它可以工作。:-)

    我刚刚看到了这个解决方案,并写了一篇文章,介绍了如何在不映射实体的情况下实现这一点

    我希望这可能对您有所帮助->