android - 在 Android 改造中集成简单 XML 转换器时出现的问题

标签 android converter integration retrofit simple-framework

在为 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/

相关文章:

javascript - 在 jQuery 和 Phonegap 中滑动会意外地工作

android - Glide和recyclerview,内存太大

ruby-on-rails - 主动商家集成(异地付款)

javascript - 将 Actionscript 转换为 Javascript

c# - XML 到文本转换

java - 如何将Scala语言与Spring Security集成

c# - 在与统计/模拟软件交互时,C# 和 Java 中哪一个更容易、更快速?

java - GPS 定位仅在应用程序首次打开时有效

android - 类型 'NewInstance' 不存在于类型 'DatePickerFragment'

.net - 如何在运行时动态更改 MultiBinding(或任何其他)资源的 ConverterParameter(或任何)属性?