Android 在 Kotlin 中改造 + SimpleXMLConverter

Android Retrofit + SimpleXMLConverter in Kotlin

我正在尝试让 Retrofit 和 SimpleXmlConverter 在我的 Kotlin Android 项目上工作(出于显而易见的原因,我之前只使用过 json),并保持 运行成各种错误。现在错误是“无法满足...ElementList...方法 'itemsList'”。

我最终试图将元素列表放入 Kotlin 列表中。下面是 XML 响应和我写给反序列化的 类。

有什么要跳出来的吗?

编辑:我还尝试为所有 Element 和 ElementList 注释设置 required = false,当我这样做时它不会出错,但我没有在列表中得到任何东西。

XML 回应

<?xml version="1.0" encoding="UTF-8"?>
<response xmlns="" xmlns:xsd="" xmlns:xsi="">
   <result>
      <status>
         <code>0000</code>
         <statusMessage>The status message</statusMessage>
      </status>
      <item>
         <code>1</code>
         <display>One</display>
      </item>
      <item>
         <code>2</code>
         <display>Two</display>
      </item>
      <item>
         <code>3</code>
         <display>Three</display>
      </item>
   </result>
</response>

Response.kt

@Root(name = "response", strict = false)
class Response {
    @get:Element(name = "status", required = false)
    @set:Element(name = "status", required = false)
    @Path("result")
    var status: ResponseStatus? = null

    @get:ElementList(name = "item", inline = true, required = true)
    @set:ElementList(name = "item", inline = true, required = true)
    @Path("result")
    var itemsList: List<Items>? = null
}

Items.kt

@Root(name = "item", strict = false)
class Items {
    @get:Element(name = "code", required = true)
    @set:Element(name = "code", required = true)
    var code: String? = null

    @get:Element(name = "display", required = true)
    @set:Element(name = "display", required = true)
    var display: String? = null
}

ResponseStatus.kt

@Root(name = "status", strict = false)
class ResponseStatus {

    @get:Element(name = "code", required = false)
    @set:Element(name = "code", required = false)
    var code: String? = null

    @get:Element(name = "statusMessage", required = false)
    @set:Element(name = "statusMessage", required = false)
    var statusMessage: String? = null
}

我正在尝试查找我在哪里找到了有效的代码。但是在Model中基本上需要这样做:

@Root(name = "response", strict = false)
class Response @JvmOverloads constructor(
  @field: Element(name = "result")
  var result: Result? = null
)

@Root(name = "result", strict = false)
class Result @JvmOverloads constructor(
  @field: ElementList(inline = true)
  var itemsList: List<Items>? = null
)

@Root(name = "item", strict = false)
class Item @JvmOverloads constructor(
  @field Element(name = "code", required = false)
  var code: String = ""
  @field Element(name = "display", required = false)
  var display: String = ""
)