在为 Android 改造时集成简单 XML 转换器时,我遇到了几个问题。
1).在 build.gradle 中添加“compile ('com.squareup.retrofit:converter-simplexml:1.9.0')”后出现编译错误。
错误报告: 信息:Gradle tasks [:app:assembleDebug] Warning:Dependency xpp3:xpp3:1.1.3.3 被忽略调试,因为它可能与 Android 提供的内部版本冲突。 如有问题,请用jarjar重新打包,更改类包 Warning:Dependency xpp3:xpp3:1.1.3.3 is ignored for release 因为它可能与Android提供的内部版本冲突。 如有问题,请用jarjar重新打包,改类包
2).我在这个 http://pojo.sodhanalibrary.com/Convert 的帮助下创建了 Java 模式通过提供根类名。而且我不断为一个或另一个元素获取 InstantiateException 或 ElementException,并且 mazorly retrofit.converter.ConversionException: org.simpleframework.xml.core.ValueRequiredException: Unable to satisfy @org.simpleframework.xml.Element(data=false, name=description , required=true, type=void) 在字段“描述”上。许多字段的错误相同。
最佳答案
问题 1).
我必须在我的 build.gradle 中添加以下内容。由于这些软件包已随 Android 一起提供,因此存在问题。
compile ('com.squareup.retrofit:converter-simplexml:1.9.0') {
exclude group: 'xpp3', module: 'xpp3'
exclude group: 'stax', module: 'stax-api'
exclude group: 'stax', module: 'stax'
}
问题 2).
我必须拥有应该以 XML 中的第一个元素开始的 Java 类层次结构。
我的 XML 中有“Rss”作为第一个元素。当我使用 http://pojo.sodhanalibrary.com/Convert 生成模式时,我给了自己的名字,比如“警告”,它为所有必需的元素生成类。并且 Warnings.java 有“Rss”实例成员。我没有传递 Rss,而是将警告传递给 retrofit.Callback。
Class Warnings {
private Rss rss;
.....
.....
}
Class Rss {
private Channel channel;
.....
.....
}
它可以在某种程度上找到类的层次结构,但它开始为所有类的每个字段提供所提到的错误/异常,尽管它们似乎可用。
在解决这些错误上花费了大量时间后,我更改了传递给 retrofit.Callback 的响应类,从 Warnings 到 Rss 并且有效。
XML:
<rss version="2.0">
<channel>...</channel>
</rss>
这是我的改造请求代码,有错误:
retrofitService.getWarnings(lat, lon, authKey, new Callback<Warnings>() {
@Override
public void success(WarningsResponse warningsResponse, Response response) {
// handle success response..
}
@Override
public void failure(RetrofitError error) {
// handle error response
}
});
工作代码:
retrofitService.getWarnings(lat, lon, authKey, new Callback<Rss>() {
@Override
public void success(WarningsResponse warningsResponse, Response response) {
// handle success response..
}
@Override
public void failure(RetrofitError error) {
// handle error response
}
});
唯一的区别是传递给回调的类。
因此,使用 XML 中根元素的类名传递给 Callback,这样 XML 到 Java 对象的转换就很容易成功。
您可以在 XML 集成到 Retrofit 帮助站点中找到此讨论:
https://futurestud.io/blog/retrofit-how-to-integrate-xml-converter/
关于android - 在 Android 改造中集成简单 XML 转换器时出现的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31906173/