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