RxJava+Retrofit2实现XML解析

上一篇文章大概介绍了一下RxJava+Retrofit2解析JSON数据的方法,现在来解析XML,首先,先贴一个网络连接地址,博主也是参考上面的:

http://blog.csdn.net/qqyanjiang/article/details/51199111

XML数据与上一篇的一样,只是格式不同

//XML数据网络地址

http://webservices.nextbus.com/service/publicXMLFeed?command=routeConfig&a=sf-muni

第一步:添加依赖

compile ('com.squareup.retrofit2:converter-simplexml:2.0.1'){  

exclude group: 'xpp3', module: 'xpp3'  

exclude group: 'stax', module: 'stax-api'  

exclude group: 'stax', module: 'stax' }

全部复制,缺一不可

第二步:创建接口DataServce

interface NewsApi{

 @GET("service/publicXMLFeed")
    Observable<NewsDataXml> getNewsData(

@Query("command") String id,                                    

@Query("a") String datePre                                   

  );

}

第三步:创建model,这里与解析JSON时有一定差距的

@Root(name = "body", strict = false) //name:要解析的xml数据的头部
public class NewsDataXml {
    @Attribute
    public String copyright; //属性
    @ElementList(required = true, inline = true, entry = "route") //标志是集合
    public List<NewsXml> newsXmls = new ArrayList<>();

}

@Root(name = "route", strict = false) //要解析的xml数据的头部
public class NewsXml {
    @Attribute
    public String tag;
    @Attribute
    public String title;
}

这里需要注意的一下是,经我测试,这里如果写成内部类会导致xml数据解析失败


第四步:实现网络请求,解析XML数据

 private String basUrl="http://webservices.nextbus.com/";

 NewsApi newsApi = new Retrofit.Builder().baseUrl(basUrl)
                .addConverterFactory(SimpleXmlConverterFactory.create())
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .build()
                .create(NewsApi.class);


 newsApi .getNewsData("routeList", "sf-muni")
                    .subscribeOn(Schedulers.io())
                    .observeOn(AndroidSchedulers.mainThread())
                    .flatMap(new Func1<NewsDataXml, Observable<NewsXml>>() {
                        @Override
                        public Observable<NewsXml> call(NewsDataXml newsDataXml) {
                            return Observable.from(newsDataXml.newsXmls);
                        }
                    }).subscribe(new Subscriber<NewsXml>() {
                @Override
                public void onCompleted() {
                    Log.v("xmlidea", "onCompleted");
                }


                @Override
                public void onError(Throwable e) {
                    Log.v("xmlidea", "onError" + e.toString());
                }


                @Override
                public void onNext(NewsXml newsXml) {
                    Log.v("xmlidea", newsXml.title);
                    Log.v("xmlidea", newsXml.tag);
                }
            });
        }


OK,简单的JSON和XML数据解析都已搞定,只要理解了,即使数据再复杂一些,我相信也是没问题的,最后提一下,RxJava+Retrofit2配合MVP或者MVVM的框架使用效果会更好







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值