提问人:Kishan Solanki 提问时间:9/22/2023 更新时间:9/22/2023 访问量:70
Android Retrofit + XML响应给出以下错误:java.lang.RuntimeException:org.simpleframework.xml.core.PersistenceException
Android Retrofit + XML response gives this error : java.lang.RuntimeException: org.simpleframework.xml.core.PersistenceException
问:
我确实有一个返回以下 XML 响应的 API(检查屏幕截图)
我正在使用 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 响应的第一张屏幕截图,我突出显示了“title”标签,该标签在第一个“channel”标签和“item”列表中可用。
我正在使用第三方 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 = "",
)
这个类似的问题已经在 1、2、3 上多次提出,但没有从中得到任何帮助。
另外,这篇关于 Medium.com 的文章具有相同的 API 响应,因此复制了他/她的数据类并尝试使其工作,但仍然没有帮助。IDK他的代码是如何工作的!
尝试了所有不同的方法,但没有任何帮助。
让我知道是否有人过去做过这件事或让它起作用。
谢谢!
答:
0赞
Mohammad Reza Khahani
9/22/2023
#1
你能用 of 类的注释吗: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
)
这是一篇解释如何使用的文章,XML 响应几乎等同于您正在处理的响应。希望对你有所帮助。:DsimpleXml
评论
0赞
Kishan Solanki
9/22/2023
过去尝试过,现在再试一次,但同样的错误。没有变化!
0赞
Mohammad Reza Khahani
9/22/2023
我更新了我的答案。你能看一下,让我知道它是否有效吗?
0赞
Kishan Solanki
9/22/2023
现在它给出了不同的错误。java.lang.RuntimeException:org.simpleframework.xml.core.PersistenceException:元素“item”已与字段“itemList”上的@org.simpleframework.xml.ElementList(data=false, empty=true, entry=, inline=false, name=item, required=false, type=void)一起使用,字段“itemList”的私有 java.util.List com.app.tfeparentapp.pojo.xml.PodcastChannel.itemList 在第 87 行
0赞
Kishan Solanki
9/22/2023
此外,在上面的屏幕截图中,您只能看到一个项目标签。但是有很多标签可用(列表)一个接一个。像<Item>...</item> <item>...</item> <item>...</项目>
0赞
Mohammad Reza Khahani
9/22/2023
谢谢你的澄清。我更新了我的答案。你能再看一看吗?
评论