Retrofit结合RxJava使用说明
来源:互联网 发布:windows7系统优化工具 编辑:程序博客网 时间:2024/06/05 20:33
PS:年后一直没有更新博客,实在是太忙了。今天周六也是终于抽出了时间,就决定写一篇Retrofit结合RxJava使用说明。刚好现在写的的项目中也有用到,趁热打铁简单说说。最近也不知道博客写什么内容,大家有什么想了解的内容,也可以评论告诉我,我尽力解答。
如果对Retrofit不了解可以看我之前的一篇博客:Retrofit 2.0使用 ,这次的内容也是在此基础上的。关于RxJava可以参考:学习RxJava(资料汇总),这里我就不多说了。
1.准备工作
我们需要添加相应的依赖:
compile 'io.reactivex:rxjava:1.1.0' compile 'io.reactivex:rxandroid:1.1.0' compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4' compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta4' compile 'com.squareup.retrofit2:adapter-rxjava:2.0.0-beta4'
2.使用
首先我在网上随便找了一个接口用于测试:http://apistore.baidu.com/microservice/cityinfo?,Get请求,参数是cityname
也就是你要查询的城市名称。我以查询西安为例。
我们首先直接请求看一下返回结果:
{ "errNum": 0, "retMsg": "success", "retData": { "cityName": "西安", "provinceName": "陕西", "cityCode": "101110101", "zipCode": "710000", "telAreaCode": "029" }}
那么我们先写一个City对象用于Gson解析(这里我们只获取retData中的数据,后面我会用自定义转换器转换):
public class City { private String cityName; private String provinceName; private String cityCode; private String zipCode; private String telAreaCode; public City(String cityName, String provinceName, String cityCode, String zipCode, String telAreaCode) { this.cityName = cityName; this.provinceName = provinceName; this.cityCode = cityCode; this.zipCode = zipCode; this.telAreaCode = telAreaCode; } public String getProvinceName() { return provinceName; } public void setProvinceName(String provinceName) { this.provinceName = provinceName; } public String getCityName() { return cityName; } public void setCityName(String cityName) { this.cityName = cityName; } public String getCityCode() { return cityCode; } public void setCityCode(String cityCode) { this.cityCode = cityCode; } public String getZipCode() { return zipCode; } public void setZipCode(String zipCode) { this.zipCode = zipCode; } public String getTelAreaCode() { return telAreaCode; } public void setTelAreaCode(String telAreaCode) { this.telAreaCode = telAreaCode; }}
Api请求接口:
public interface CityApi { @GET("cityinfo?") Observable<City> getCityInfo(@Query("cityname") String cityname);}
自定义转换器:
public class DeserializerCity <T> implements JsonDeserializer<T> { @Override public T deserialize(JsonElement je, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { // 转换Json的数据 JsonElement results = je.getAsJsonObject().get("retData"); return new Gson().fromJson(results, typeOfT); }}
创建CityApi类:
public class CityService { public static final String CITY_URL = "http://apistore.baidu.com/microservice/"; private static Gson customGsonInstance = new GsonBuilder() .registerTypeAdapter(City.class,new DeserializerCity<City>()) .create(); private static Retrofit retrofit = new Retrofit.Builder() .baseUrl(CITY_URL) .addConverterFactory(GsonConverterFactory.create(customGsonInstance)) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .build(); public static CityApi createCityService() { return retrofit.create(CityApi.class); }}
调用:
public void getCityInfo(String cityname){ CityApi service = CityService.createCityService(); Subscription subscription = service.getCityInfo(cityname) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .unsubscribeOn(Schedulers.io()) .subscribe(new Subscriber<City>() { @Override public void onCompleted() { } @Override public void onError(Throwable error) { } @Override public void onNext(City city) { Log.d("CityInfo:",city.getCityCode() + "--" + city.getProvinceName()); } }); }
结果:
D/CityInfo:: 101110101--陕西
以上就是简单的使用方法。觉得好的多多点赞!
2 0
- Retrofit结合RxJava使用说明
- rxjava和retrofit结合
- Retrofit与Rxjava结合
- RxJava + Retrofit 结合使用
- Retrofit结合rxjava使用
- RxJava和Retrofit结合
- Retrofit 和 RxJava 结合使用
- RxJava与Retrofit结合学习
- RxJava,Retrofit,OkHttp3结合使用
- Retrofit笔记->结合Rxjava初识
- Retrofit和RxJava结合使用
- RxJava RxAndroid Retrofit实践结合
- RxJava+Retrofit+okhttp实践结合
- RxJava和Retrofit结合使用
- RxJava和Retrofit结合使用
- Retrofit+Rxjava的完美结合
- Retrofit + RxJava 的结合使用
- Retrofit与Rxjava结合使用
- 326. Power of Three
- 求两个等长有序数组中位数算法问题
- 第四周项目1:求四个数的最大公约数
- android listview左右滑动分页(viewpager嵌套listview进行分页),焦点图带圆焦点
- [python]Graphlab的基本用法
- Retrofit结合RxJava使用说明
- jQuery存在的必要性
- codeforces-Good Bye 2015-New Year and Domino
- 二维映射成一维(1541)
- 文件链接读取程序
- 蓝桥杯 小朋友排队 (归并排序 逆序数 好题)
- UIScrollView -滚动视图
- android中xml tools属性详解
- 第四周项目3:猜数字游戏