RxJava+Retrofit2实现JSON解析

今天为大家带来的是目前来说比较热门的一个网络框架,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的解析,如果有什么问题的话,请私聊我,谢谢

你可能感兴趣的:(RxJava+Retrofit2实现JSON解析)