RxJava1 与 RxJava2
RxJava 有 RxJava1
和 RxJava2
,两者不能共存。
如果APP中使用的是 RxJava2
,但是某个第三方的 library 还在使用 Rxjava1
也会出现异常。
如下面这种引用方式:
implementation "io.reactivex.rxjava2:rxjava:2.2.6"
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
implementation 'com.squareup.retrofit2:adapter-rxjava:2.5.0'
就会出现
Unable to create call adapter for io.reactivex.Observable
是因为retrofit2 中的 calladapter
用的是rxjava1
,与rxjava2
不兼容,无法创建calladapter。
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
mRetrofit = new Retrofit.Builder()
.client(client)//添加一个client,不然retrofit会自己默认添加一个
.baseUrl(url)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
需要修改成:
同时使用RxJava1 或RxJava2
- build.gradle
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.5.0'
implementation "io.reactivex.rxjava2:rxjava:2.2.6"
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
mRetrofit = new Retrofit.Builder()
.client(client)//添加一个client,不然retrofit会自己默认添加一个
.baseUrl(url)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build();