在Android改造中集成Simple XML转换器时遇到的问题

cgr*_*cgr 5 integration android converter simple-framework retrofit

在为Android改造中集成Simple XML转换器时,我遇到了一些问题.
1).在build.gradle中添加"compile('com.squareup.retrofit:converter-simplexml:1.9.0')"后,我收到了编译错误.

错误报告:信息:Gradle任务[:app:assembleDebug]警告:调试将忽略依赖关系xpp3:xpp3:1.1.3.3,因为它可能与Android提供的内部版本冲突.如果出现问题,请使用jarjar重新打包以更改类包警告:依赖xpp3:xpp3:1.1.3.3因发布而被忽略,因为它可能与Android提供的内部版本冲突.如果有问题,请用jarjar重新打包以更改类包

2).我通过提供根类名称在http://pojo.sodhanalibrary.com/Convert的帮助下创建了Java Schemas .我继续为一个或另一个元素获取InstantiateException或ElementException,并且mazorly retrofit.converter.ConversionException:org.simpleframework.xml.core.ValueRequiredException:无法满足@ org.simpleframework.xml.Element(data = false,name = description字段"description"上的,required = true,type = void).许多字段的错误相同.

cgr*_*cgr 12

问题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'
    }
Run Code Online (Sandbox Code Playgroud)

问题2).
我必须拥有Java类层次结构,该层次结构应该以XML中的第一个元素开头.我把"Rss"作为我XML中的第一个元素.虽然我使用http://pojo.sodhanalibrary.com/Convert生成了模式,但我给自己命名了类似"警告"的东西,它为所有必需的元素生成了类.而Warnings.java有"Rss"实例成员.我没有通过Rss,而是通过了警告来改造.Callback.

Class Warnings {
   private Rss rss;
   .....
   .....
}  

Class Rss {
   private Channel channel;
   .....
   .....
}  
Run Code Online (Sandbox Code Playgroud)

它可以在某种程度上找到类的层次结构,但它开始为所有类的每个字段提供有问题的错误/异常,尽管它们似乎可用.
经过相当长的一段时间来解决这些错误之后,我将已经传递给retrofit.Callback的响应类从Warnings更改为Rss并且这样做有效.

XML:

<rss version="2.0">
<channel>...</channel>
</rss>
Run Code Online (Sandbox Code Playgroud)

这是我的改造请求代码,包含错误:

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
              }
        });
Run Code Online (Sandbox Code Playgroud)

工作代码:

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
              }
        });
Run Code Online (Sandbox Code Playgroud)

唯一的差异是传递给回调的类.

因此,使用XML中的根元素的类名传递给Callback,这样XML到Java对象的转换就很容易成功.

您可以在XML集成到Retrofit帮助站点中找到此讨论:https:
//futurestud.io/blog/retrofit-how-to-integrate-xml-converter/