使用XML API中的Retrofit读取列表<item> </item>

时间:2015-01-07 10:18:20

标签: java android xml retrofit

我正在尝试使用SimpleXmlConverter的Retrofit从我的API中读取数据。

我的课程评论如下:

@Root
class Comment {
  @Element
  private String text;
}    

我想阅读XML中的评论列表:

<comments>
  <comment>
    <text>sample text</text>
  </comment>
  <comment>
    <text>sample text</text>
  </comment>
</comments>

在我的界面中有一个方法:

@GET("/lastcomments")
ArrayList<Comment> lastComments();

但是当我调用lastComments()时,Retrofit会抛出:

 Caused by: retrofit.RetrofitError: java.lang.ClassCastException: libcore.reflect.ParameterizedTypeImpl cannot be cast to java.lang.Class
        ...
 Caused by: retrofit.converter.ConversionException: java.lang.ClassCastException: libcore.reflect.ParameterizedTypeImpl cannot be cast to java.lang.Class
        at com.mobprofs.retrofit.converters.SimpleXmlConverter.fromBody(SimpleXmlConverter.java:76)
        ...
 Caused by: java.lang.ClassCastException: libcore.reflect.ParameterizedTypeImpl cannot be cast to java.lang.Class
        at com.mobprofs.retrofit.converters.SimpleXmlConverter.fromBody(SimpleXmlConverter.java:72)

是否可以直接从API读取列表,或者我必须创建包装器:

@Root(name="comments")
class CommentsList {
  @Element(name="comment", inline=true)
  List<Comment> comments;
}

2 个答案:

答案 0 :(得分:5)

对不起,我知道这可能为时已晚,但答案是:

您需要使用ElementList属性:

@Root(name="comments")
class CommentsList {
    @ElementList(name="comment")
    List<Comment> comments;
}

答案 1 :(得分:2)

您需要使用CommentList类。界面应该是:

@GET("/lastcomments")
CommentList lastComments();

用于同步通话或

@GET("/lastcomments")
void lastComments(Callback<CommentList> callback);

用于异步调用。