Retrofit结合RxJava使用说明

原创 2016年03月19日 19:55:05

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--陕西

以上就是简单的使用方法。觉得好的多多点赞!

版权声明:本文为博主原创文章,未经博主允许不得转载。http://blog.csdn.net/qq_17766199 举报

相关文章推荐

Retrofit结合RxJava使用说明

最近也不知道博客写什么内容,大家有什么想了解的内容,也可以评论告诉我,我尽力解答。如果对Retrofit不了解可以看我之前的一篇博客:[Retrofit 2.0使用](http://blog.csdn...

【Retrofit-v2.1.0】使用说明

原文链接:http://square.github.io/retrofit/简介Rtrofit将你的HTTP API转换成java接口.public interface GitHubService {...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

RxJava,Retrofit,OkHttp3结合使用

首先 亮出 gradle apply plugin: 'com.android.application' android { compileSdkVersion 23 buildT...

RxJava和Retrofit结合使用

前言:前段时间花了点时间学了一下RxJava和Retrofit,后面在实践中被没有用到,今天一看,呃,怎么又忘得差不多了。

Retrofit+Rxjava结合使用(三)

1.Rxjava的介绍 2.Rxjava的原理 3.Rxjava重点解析 4.Retrofit与Rxjava的完美结合 1.build.gradle中添加配置: compile 'com.squar...

Retrofit 和 RxJava 结合使用

既然使用了Retrofit ,那么不去使用一下它的RxJava总觉得心有不甘。Ok,既然有了目标,那么就要去实现它!

Retrofit和RxJava结合使用

使用Retrofit的时候就不得不提到RxJava,RxJava是一个基于观察者模式的异步实现。关于RxJava的入门学习,强烈推荐《给Android开发者的RxJava详解》 https://g...

欢迎使用CSDN-markdown编辑器

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和...

Retrofit与Rxjava结合

目前Retrofit与Rxjava比较流行,抽个空就学习了一下,网上也有好多讲解的,看了好多,终于看明白了,其实也不难。在这做个记录。下面直接贴代码了。

欢迎使用CSDN-markdown编辑器

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)