【问题标题】:Android Retrofit + SimpleXMLConverter in KotlinKotlin 中的 Android 改造 + SimpleXMLConverter
【发布时间】:2020-07-15 20:07:19
【问题描述】:

我正在尝试让 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>

响应.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
}

【问题讨论】:

    标签: android kotlin retrofit2 simple-xml-converter


    【解决方案1】:

    我正试图找到我在哪里找到了有效的代码。但基本上需要在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 = ""
    )
    

    【讨论】:

      猜你喜欢
      • 2018-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-04
      • 2021-05-08
      • 1970-01-01
      • 2018-07-07
      • 2022-08-06
      相关资源
      最近更新 更多