2015-01-07 12 views
5

私は、APIからデータを読み込むためにRetrofitをSimpleXmlConverterで使用しようとしています。私のインターフェイスでリストを読む<Item>をXML APIのRetrofitで追加

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

方法があります:

私のクラスのコメントは次のようになります。

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

私はXMLからのコメントのリストを読みたい

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

しかし、私がlastComments()を呼び出すと、レトロフィットスロー:

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

はあなたのCommentListクラスを使用する必要があります。インターフェースは次のようになります同期呼び出しまたは非同期呼び出しのため

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

ため

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

5

申し訳ありませんが、私はこれはおそらく手遅れですが、ここで答えを知っている:

@Root(name="comments") 
class CommentsList { 
    @ElementList(name="comment") 
    List<Comment> comments; 
} 
:あなたはElementList属性を使用する必要が