Java Can';t读取rss XML,使用简单的XML和改进
我已经搜索了很多,但是我不能将我的XML分配给我的类,并且在尝试反序列化XML时,我从改装中得到了一个错误 这是我从接口调用的XML(仅第一项): 此外,我还创建了一些模型类来承载XML中的标记,我省略了getter:Java Can';t读取rss XML,使用简单的XML和改进,java,android,retrofit,pojo,simple-framework,Java,Android,Retrofit,Pojo,Simple Framework,我已经搜索了很多,但是我不能将我的XML分配给我的类,并且在尝试反序列化XML时,我从改装中得到了一个错误 这是我从接口调用的XML(仅第一项): 此外,我还创建了一些模型类来承载XML中的标记,我省略了getter: @Root(name="rss", strict = false) public class Rss { @Element(name="channel") private Channel channel; } @Root(name = "item", st
@Root(name="rss", strict = false)
public class Rss {
@Element(name="channel")
private Channel channel;
}
@Root(name = "item", strict = false)
public class Item {
@Element(name = "title")
private String title;
@Element(name = "link")
private String link;
@Element(name = "comments")
private String comments;
@Element(name = "pubDate")
private String pubDate;
}
@Root(name="channel", strict = false)
public class Channel {
@ElementList(name="item",inline = true)
private ArrayList<Item> items;
}
因此,我从改装中得出以下错误:
org.simpleframework.xml.core.ValueRequiredException:无法满足类Model.Channel第9行的字段“items”私有java.util.ArrayList Model.Channel.items上的@org.simpleframework.xml.ElementList(data=false,empty=true,entry=,inline=true,name=item,required=true,type=void)
我到处都搜索过,我认为我的实现是正确的,但是我找不到错误,我已经多次更改了我的模型类,并且使用了来自web的POJO生成器,但是我仍然无法修复这个错误。请帮忙!谢谢大家! 最后,我改变了我的回拨方式,它成功了。我必须在回调中使用模型类Rss,例如:
public interface ApiService {
@GET("/?feed=single_gallery_feed")
void getGadgets(@Query("paged")int page, Callback<Rss> gadgetsCallback);
}
如果我想得到
标签,我应该怎么做?你应该使用名称空间标签注释,在名称空间内你应该使用内容!如果变量的名称与编码的名称不同,则还应使用标记注释名称,该名称将等于编码的属性。谢谢,您还可以发布一个代码片段。我对名称空间注释有点困惑。我尝试过这样做:@Namespace(prefix=“content”)公共字符串编码代码>但它不起作用。我还尝试用一个名为body
的字段注释一个类内容
,该字段用@元素(name=“encoded”)注释
但也不起作用。没关系,我找到了问题的答案,POJO类可以用名称空间列表
进行注释,该列表将包含名称空间列表。POJO字段使用@元素
进行注释。例如,对于我关于获取
的问题,用@名称空间(前缀=“内容”,引用=”http://purl.org/rss/1.0/modules/content/”
,然后用@Element(name=“encoded”)
public class RestClient {
private ApiService apiService;
public RestClient(){
RestAdapter restAdapter = new RestAdapter.Builder()
.setLogLevel(RestAdapter.LogLevel.FULL)
.setClient(new OkClient(new OkHttpClient()))
.setEndpoint("http://flow.com")
.setConverter(new SimpleXMLConverter())
.build();
apiService = restAdapter.create(ApiService.class);
}
public ApiService getApiService(){
return apiService;
}
}
@Root(name="rss", strict = false)
public class Rss {
@Element(name="channel")
private Channel channel;
}
@Root(name = "item", strict = false)
public class Item {
@Element(name = "title")
private String title;
@Element(name = "link")
private String link;
@Element(name = "comments")
private String comments;
@Element(name = "pubDate")
private String pubDate;
}
@Root(name="channel", strict = false)
public class Channel {
@ElementList(name="item",inline = true)
private ArrayList<Item> items;
}
public class MainActivity extends AppCompatActivity {
private ArrayList<Item> mList;
private Button pagerButton;
private int page = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
pagerButton = (Button)findViewById(R.id.pager);
pagerButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
RestClient restClient = new RestClient();
Callback<Channel> callback = new Callback<Channel>() {
@Override
public void success(Channel gadgets, Response response) {
mList = gadgets.getItems();
}
@Override
public void failure(RetrofitError error) {
Log.d("billy",error.getLocalizedMessage());
}
};
restClient.getApiService().getGadgets(page,callback);
page++;
}
});
if(mList != null) {
for(int i = 0; i < mList.size();i++) {
//mList = mItem.getGadgets();
Log.d("billy", "Item : " + String.valueOf(i));
Log.d("billy", "Title: " + mList.get(i).getTitle());
Log.d("billy", "PubDate: " + mList.get(i).getPubDate());
Log.d("billy", "ImageURL: " + mList.get(i).getLink());
Log.d("billy","-------------------------------------------------------------------- ");
}
}
}
}
public interface ApiService {
@GET("/?feed=single_gallery_feed")
void getGadgets(@Query("paged")int page, Callback<Rss> gadgetsCallback);
}
RestClient restClient = new RestClient();
Callback callback = new Callback() {
@Override
public void success(Object o, Response response) {
Categories_ = (Categories)o;
}
@Override
public void failure(RetrofitError error) {
Toast toast = Toast.makeText(getApplication(), "Something went wrong!!", Toast.LENGTH_SHORT);
toast.show();
}
};
restClient.getApiService().getCategories(callback);