我正在尝试使用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;
}
答案 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);
用于异步调用。