改造和simpleXMLConverter

时间:2014-04-02 16:43:28

标签: android retrofit

我一直在尝试将Retrofit与使用XML的API一起使用。我还注意到改造在这里有一个名为SimpleXmlConverter的XML转换器:

https://github.com/mobile-professionals/retrofit-simplexmlconverter

但是当我尝试使用它时,出现了这个错误:

FATAL EXCEPTION: Thread-14844
retrofit.RetrofitError: retrofit.converter.ConversionException: java.lang.ClassCastException: org.apache.harmony.luni.lang.reflect.ImplForType cannot be cast to java.lang.Class
        at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:409)
        at retrofit.RestAdapter$RestHandler.invoke(RestAdapter.java:284)
        at com.aaaa.common.$Proxy0.configs(Native Method)
        at com.aaaa.common.DemoAPI.getContributos(DemoAPI.java:47)
        at com.aaaa.MainActivity$1.run(MainActivity.java:27)
        at java.lang.Thread.run(Thread.java:841)
 Caused by: retrofit.converter.ConversionException: java.lang.ClassCastException: org.apache.harmony.luni.lang.reflect.ImplForType cannot be cast to java.lang.Class
        at retrofit.converter.SimpleXMLConverter.fromBody(SimpleXMLConverter.java:38)
        at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:394)

at retrofit.RestAdapter$RestHandler.invoke(RestAdapter.java:284)
            at com.aaaa.common.$Proxy0.configs(Native Method)
            at com.aaaa.common.DemoAPI.getContributos(DemoAPI.java:47)
            at com.aaaa.MainActivity$1.run(MainActivity.java:27)
            at java.lang.Thread.run(Thread.java:841)
    Caused by: java.lang.ClassCastException: org.apache.harmony.luni.lang.reflect.ImplForType cannot be cast to java.lang.Class
            at retrofit.converter.SimpleXMLConverter.fromBody(SimpleXMLConverter.java:36)
            at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:394)
            at retrofit.RestAdapter$RestHandler.invoke(RestAdapter.java:284)
            at com.aaaa.common.$Proxy0.configs(Native Method)
            at com.aaaa.common.DemoAPI.getContributos(DemoAPI.java:47)
            at com.aaaa.MainActivity$1.run(MainActivity.java:27)
            at java.lang.Thread.run(Thread.java:841)

我正在制作一个示例应用程序,所以我只想简单地使用我的代码:

RestAdapter restAdapter = new RestAdapter.Builder()
            //.setEndpoint(API_URL)
            .setServer(API_URL)
            .setConverter(new SimpleXMLConverter())
            .build();

static class Config {
    String name;
    int firstInt;
    int secondInt;
}

interface Demo {
    @GET("/{user}/api/config")
    List<Config> configs (
            @Path("user") String owner
    );
}

2 个答案:

答案 0 :(得分:0)

您没有使用属于retrofit-simplexmlconverter库的“SimpleXmlConverter”类。相反,你正在使用“SimpleXMLConverter”类(参见大写的“XML”),这是改造本身的一部分。我建议你选择正式的,因为这是经过单元测试并且在更积极的开发下。 当没有用于改造的xml转换器时,我创建了retrofit-simplexmlconverter lib。

不幸的是,我没有看到你一见钟情的原因。转换器类的实现应该类似。所以关于你的问题,我认为你使用哪一个不应该有所区别。如果我是你,我会介入一个调试器,以了解导致ClassCastException的原因。

答案 1 :(得分:0)

搞定了!!

看起来内部类不能通过反射以与普通类相同的方式实例化,它们需要由构造函数实例化,因此...... SimpleXMLconverter不适用于像我这样的内部类:

static class Config {
    String name;
    int firstInt;
    int secondInt;
}

我刚刚创建了一个新文件夹&#34; Models&#34;与那些课程和作品完美! ;)

非常感谢@Sebastian Engel教我并告诉我如何解决它。