今天为大家带来的是目前来说比较热门的一个网络框架,RxJava+Retrofit2,RxJava的模式是观察者模式,Retrofit2是OkHttp的升级版,至于具体细节可以参考下面这篇文章:
http://www.jianshu.com/p/19cac3c5b106
1.RxJava+Retrofit2的JSON数据解析
在这里盗用网上的一段JSON数据 哈哈
{"code":0,"data":{"ip":"210.75.225.254","country":"\u4e2d\u56fd","area":"\u534e\u5317",
"region":"\u5317\u4eac\u5e02","city":"\u5317\u4eac\u5e02","county":"","isp":"\u7535\u4fe1",
"country_id":"86","area_id":"100000","region_id":"110000","city_id":"110000",
"county_id":"-1","isp_id":"100017"}}
我们可以看到,在上面有属性code,集合data,data里面有很多数据,我就不一一列举了
第一步:构建我们的model: (在这里我使用到了两个注解,这两个注解在XML中是不能使用的)
class DataModel{
@SerializedName("code") @Expose public String code;
@SerializedName("data") @Exposepublic List dataList = new ArrayList<>();
public static class DataList {
@SerializedName("ip") @Expose public String ip= "";
@SerializedName("country") @Expose public String country= "";
这里面填写的是集合里面的数据,剩下的我就不写了
}
}
第二步:创建我们的接口DataService
public interfaceDataService{
//首先区分@GET 和@POST的区别
//@Path@和@Query的区别
//不传参数
@GET
ObservablegetDataModel(@Url String url);//url是接在IP地址后面的路径
//假如要传参数
@GET("api/datalist/data.json") //()里面的路径是接在IP地址后面的
Observable getDataModel(
@Query("id") String id);
}
}
第三步:创建我们的activity并调用RxJava+Retrofit2来实现解析JSON数据
直接贴解析代码的数据了:
1.首先创建Retrofit,
DataServiceepgDataService = new Retrofit.Builder().baseUrl(URL) //URL 指你的网络IP地址
.addConverterFactory(GsonConverterFactory.create(new Gson())) //添加JSON解析的工厂
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build()
.create(EpgDataService.class);
dataService.getDataModel(url)//有参数就传
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()).
doOnNext(new Action1() {
@Override
public void call(DataModeldata) {
Log.v("idea",data.code+data.dataList.size);
//在这里可以打印出DataModel的属性值,那么我们要是想得到dataList里的数据,又该怎么做呢
这里就要用到RxJava里的flatMap了,不了解的朋友可以参考我之前发的网络链接
}
}).flatMap(new Func1>() {
@Override
public Observable call(DataModeldata) {
return Observable.from(data.dataList);
}
}).subscribe(new Subscriber() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(final Item item) {
Log.v("idea","success");
//在这里就可以出打印出集合里面的数据了
}
}
});
OK,至此Json数据解析结束,下一篇为大家带来的是xml的解析,如果有什么问题的话,请私聊我,谢谢