在 Android 的改造中集成简单 XML 转换器时出现问题
Issues while integrating Simple XML converter in retrofit for Android
我在为 Android 改造时集成简单 XML 转换器时遇到了几个问题。
1).在 build.gradle.
中添加 "compile ('com.squareup.retrofit:converter-simplexml:1.9.0')" 后出现编译错误
错误报告:
Information:Gradle 任务 [:app:assembleDebug]
Warning:Dependency xpp3:xpp3:1.1.3.3 被调试忽略,因为它可能与 Android 提供的内部版本冲突。
如有问题,请用jarjar重新打包,更改class包
Warning:Dependency xpp3:xpp3:1.1.3.3 被忽略发布,因为它可能与 Android 提供的内部版本冲突。
如有问题,请用 jarjar 重新打包以更改 class 包
2).我通过提供 root class 名称在这个 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) 在字段 "description" 上。许多字段出现相同的错误。
问题 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).
我必须拥有 Java class 层次结构,该层次结构应以 XML 中的第一个元素开始。
我的 XML 中的第一个元素是 "Rss"。当我使用 http://pojo.sodhanalibrary.com/Convert 生成模式时,我给了自己的名字,例如 "Warnings",它为所有必需的元素生成了 classes。 Warnings.java 有 "Rss" 个实例成员。我没有传递 Rss,而是将警告传递给 retrofit.Callback。
Class Warnings {
private Rss rss;
.....
.....
}
Class Rss {
private Channel channel;
.....
.....
}
它可以在某种程度上找到 classes 的层次结构,但它开始为所有 classes 的每个字段提供有问题的 errors/exceptions,尽管它们似乎可用。
在花费大量时间解决这些错误后,我将传递给 retrofit.Callback 的响应 class 从警告更改为 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
}
});
唯一的区别是 class 传递给回调。
因此,使用 XML 中根元素的 class 名称传递给回调,这样 XML 到 Java 对象的转换就很容易成功。
您可以在 XML 与 Retrofit 帮助站点的集成中找到此讨论:
https://futurestud.io/blog/retrofit-how-to-integrate-xml-converter/
Just in case if someone is looking for a resolution in maven then it will be
done as follows -
<dependency>
<groupId>com.squareup.retrofit</groupId
<artifactId>converter-simplexml</artifactId>
<version>${converter-simplexml.version}</version>
<exclusions>
<exclusion>
<groupId>stax</groupId>
<artifactId>stax</artifactId>
</exclusion>
</exclusions>
</dependency>
我在为 Android 改造时集成简单 XML 转换器时遇到了几个问题。
1).在 build.gradle.
错误报告: Information:Gradle 任务 [:app:assembleDebug] Warning:Dependency xpp3:xpp3:1.1.3.3 被调试忽略,因为它可能与 Android 提供的内部版本冲突。 如有问题,请用jarjar重新打包,更改class包 Warning:Dependency xpp3:xpp3:1.1.3.3 被忽略发布,因为它可能与 Android 提供的内部版本冲突。 如有问题,请用 jarjar 重新打包以更改 class 包
2).我通过提供 root class 名称在这个 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) 在字段 "description" 上。许多字段出现相同的错误。
问题 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).
我必须拥有 Java class 层次结构,该层次结构应以 XML 中的第一个元素开始。
我的 XML 中的第一个元素是 "Rss"。当我使用 http://pojo.sodhanalibrary.com/Convert 生成模式时,我给了自己的名字,例如 "Warnings",它为所有必需的元素生成了 classes。 Warnings.java 有 "Rss" 个实例成员。我没有传递 Rss,而是将警告传递给 retrofit.Callback。
Class Warnings {
private Rss rss;
.....
.....
}
Class Rss {
private Channel channel;
.....
.....
}
它可以在某种程度上找到 classes 的层次结构,但它开始为所有 classes 的每个字段提供有问题的 errors/exceptions,尽管它们似乎可用。
在花费大量时间解决这些错误后,我将传递给 retrofit.Callback 的响应 class 从警告更改为 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
}
});
唯一的区别是 class 传递给回调。
因此,使用 XML 中根元素的 class 名称传递给回调,这样 XML 到 Java 对象的转换就很容易成功。
您可以在 XML 与 Retrofit 帮助站点的集成中找到此讨论:
https://futurestud.io/blog/retrofit-how-to-integrate-xml-converter/
Just in case if someone is looking for a resolution in maven then it will be
done as follows -
<dependency>
<groupId>com.squareup.retrofit</groupId
<artifactId>converter-simplexml</artifactId>
<version>${converter-simplexml.version}</version>
<exclusions>
<exclusion>
<groupId>stax</groupId>
<artifactId>stax</artifactId>
</exclusion>
</exclusions>
</dependency>