Android Retrofit + XML 响应给出此错误:java.lang.RuntimeException:org.simpleframework.xml.core.PersistenceException

问题描述 投票:0回答:1

我确实有一个 API,它返回以下 XML 响应(查看屏幕截图)

我正在使用带有 XML 的 Retrofit,请检查我的依赖项:

implementation 'com.squareup.retrofit2:retrofit:2.9.0'
//retrofit XML
implementation 'com.squareup.retrofit2:converter-simplexml:2.9.0'

当我在Android中调用API时,我成功获得了响应,但是当我获得响应时,我面临以下错误。

此错误意味着“title”标签在“channel”内已经可用,因此当“title”标签在“item”标签内也可用时会发生冲突。如果您可以看到 API 响应的第一个屏幕截图,我已突出显示“标题”标签,该标签可在第一个“频道”标签以及“项目”列表中使用。

我正在使用第三方API,因此无法更改API中的标签。我需要让它适用于 Android。

这是我的数据类(POJO 类),它接受响应并尝试使用它,但收到该错误:

@Root(name = "rss", strict = false)
class RSSFeed @JvmOverloads constructor(
    @field: Element(name = "channel") var channel: PodcastChannel? = null
)

@Root(name = "channel", strict = false)
class PodcastChannel @JvmOverloads constructor(
    @field: Element(name = "title", required = false) var title: String? = null,
    @field: ElementList(inline = true) var itemList: List<PodcastItem>? = null
)

@Root(name = "item", strict = false)
class PodcastItem @JvmOverloads constructor(
    @field: Element(name = "title", required = false) var title: String = "",
    @field: Element(name = "description", required = false) var description: String = "",
)

这个类似的问题已经在 123 上多次提出,但没有从中得到任何帮助。

此外,Medium.com 上的This Article 具有相同的 API 响应,因此复制了他/她的数据类并尝试使其工作,但仍然没有帮助。我不知道他的代码是如何工作的!

尝试了各种不同的方法,但没有任何帮助。

如果有人过去做过此操作或使其成功,请告诉我。

谢谢!

android kotlin xml-parsing retrofit
1个回答
0
投票

您可以对

Path
类的
itemList
使用
PodcastChannel
注释吗:

@Root(name = "channel", strict = false)
class PodcastChannel @JvmOverloads constructor(
    @field: Element(name = "title", required = false) 
    var title: String? = null,
    @field: ElementList(inline = true)
    @field: Path("rss/channel")
    var itemList: List<PodcastItem>? = null
)
© www.soinside.com 2019 - 2024. All rights reserved.