Android Retrofit2.0+RxJava3.0 基本使用

一,ReactiveX

要学习RxJava,那么不得不提他的由来ReactiveX,ReactiveX 是一个专注于异步编程与控制可观察数据(或者事件)流的API。它组合了观察者模式,迭代器模式和函数式编程的优秀思想。ReactiveX是Reactive Extensions的缩写,一般简写为Rx,最初是LINQ的一个扩展,由微软的架构师Erik Meijer领导的团队开发;

二,Rx的发展

Rx这几年非常流行,以至于开发出多种语言版本,例如RxJava 、 RxGo 、RxJS、RxKotlin、RxPYRx.NET等等;Rx的大部分语言库由ReactiveX这个组织负责维护,社区网站是 reactivex.io

三,RxJava

RxJava是响应式编程(Reactive Extensions)的java实现,它基于观察者模式的实现了异步编程接口。

Rxjava 3.x 的github官网

Rxjava 3.0的一些改变:官方Wiki

Rxjava 3.x 文档可以在官方javadoc中找到

RxAndroid 3.0 GitHub官网

1,Retrofit + RxJava3组合使用

首先要引入依赖

    implementation "io.reactivex.rxjava3:rxjava:3.0.0"
    implementation 'io.reactivex:rxandroid:1.2.1'
    implementation 'com.squareup.retrofit2:retrofit:2.7.0'
    implementation 'com.squareup.retrofit2:adapter-rxjava3:2.9.0'

相关配置module下的build.gradle

android {
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

注意Retrofit和RxJava组合使用时,Retrofit中使用的rxjava适配器(adapter-rxjava3)要和RxJava版本(io.reactivex.rxjava3:rxjava:3.0.0)一致;如本例都是使用的时3.0;关于先前Rerotfit没有Rxjava3.0适配器问题;

创建Retrofit时如果要使用rxjava适配,注意不要写错,正确姿势如下代码:

Retrofit retrofit = new Retrofit.Builder()
                .addCallAdapterFactory(RxJava3CallAdapterFactory.createSynchronous())
                // Or
                // .addCallAdapterFactory(RxJava3CallAdapterFactory.createWithScheduler(Schedulers.io()))
                .baseUrl("")
                .build();

2,Retrofit + RxJava组合使用

如果要使用1.0可以这样添加依赖

 implementation 'io.reactivex:rxjava:1.0.14
 implementation 'io.reactivex:rxandroid:1.0.1'
 implementation 'com.squareup.retrofit2:retrofit:2.0.2'
 implementation 'com.squareup.retrofit2:adapter-rxjava:2.0.2'

Retrofit创建的正确姿势:

Retrofit retrofit = new Retrofit.Builder()
        .baseUrl("http://www.baidu.com/")
        .addConverterFactory(GsonConverterFactory.create())
        .build();

3,Retrofit + RxJava2.0组合使用

关于RxJava2.0的使用要从一个异常说起:

异常:

Could not locate call adapter for io.reactivex.Observable<okhttp3.ResponseBody>.

compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0' RxJava适配器是1.0

所以换成RxJava2.0就可以了,原因Android项目中使用的是RxJava2.0,那么Retrofit要配合Rxjava使用,相应的要配置Rxjava2.0适配器;以此类推如果要使用Rxjava3.0那么相应的Retrofit中的

两种方式配置Retrofit中使用的RxJava2.0适配器

1,第三方的提供的RxJava2.0适配器

implementation  'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0'

2,从Retrofit 2.2.0版开始,RxJava2适配器有一个官方提供的:

implementation 'com.squareup.retrofit2:adapter-rxjava2:2.2.0'

然后修改Retrofit创建时代码:

Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(baseUrl)
            .client(new OkHttpClient.Builder().build())
            .addCallAdapterFactory(RxJava2CallAdapterFactory.create()).build();
return retrofit.create(serviceClass);

具体还可以参考

https://stackoverflow.com/questions/43434073/unable-to-create-call-adapter-for-io-reactivex-observable

Retrofit和Rxjava2.0配合使用需要的依赖

    implementation 'com.squareup.retrofit2:retrofit:2.2.0'//retrofit
    implementation 'com.squareup.retrofit2:adapter-rxjava2:2.2.0' //配合Rxjava 使用的适配器
    //下面两个是RxJava 和RxAndroid
    implementation 'io.reactivex.rxjava2:rxjava:2.2.18'
    implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'

四,Retrofit+Rxjava2具体使用案例

Retrofit+Rxjava2实现图片批量下载的功能

  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 13
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ang_qq_252390816

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值