RxJava 有 RxJava1
和 RxJava2
,二者不能共存。java
若是APP中使用的是 RxJava2
,可是某個第三方的 library 還在使用 Rxjava1
也會出現異常。react
以下面👇這種引用方式:android
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'
複製代碼
就會出現bash
Unable to create call adapter for io.reactivex.Observable
複製代碼
是由於retrofit2 中的中的 calladapter 用的是rxjava1
,與rxjava2
不兼容,沒法建立 calladapter。gradle
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
mRetrofit = new Retrofit.Builder()
.client(client)//添加一個client,否則retrofit會本身默認添加一個
.baseUrl(url)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
複製代碼
須要修改爲:ui
同時使用RxJava1 或RxJava2url
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();
複製代碼