Skip to main content

RxJava2からRxJava3に移行した

マスタカはRxJavaを使ってる
できればcoroutine使いたいけど・・・JavaのコードがAndroidにまだあるんだよなぁ・・
今回RxJava2がdeprecatedになったのでRxJava3に移行した


・マイグレーションガイド
https://github.com/ReactiveX/RxJava/wiki/What’s-different-in-3.0

 

・gradle
rxjava以外にrxandroidとadapter-rxjava2も変える。
パッケージが別なので並行可動はできる

//old
//implementation "io.reactivex.rxjava2:rxjava:hogehoge"
//implementation "io.reactivex.rxjava2:rxandroid:hogehoge"
//implementation "com.squareup.retrofit2:adapter-rxjava2:hogehoge"

//new
implementation "io.reactivex.rxjava3:rxjava:3.0.5"
implementation "io.reactivex.rxjava3:rxandroid:3.0.0"
implementation "com.squareup.retrofit2:adapter-rxjava3:2.9.0"

 

・パッケージ構成の偏向
基本的にはだいたいこれで動きそう
https://github.com/ReactiveX/RxJava/wiki/What’s-different-in-3.0#package-structure

//old
//import io.reactivex.android.schedulers.AndroidSchedulers
//import io.reactivex.rxjava3.observers.DisposableSingleObserver
//import io.reactivex.schedulers.Schedulers
//import io.reactivex.Single

//new
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.observers.DisposableSingleObserver
import io.reactivex.rxjava3.schedulers.Schedulers
import io.reactivex.rxjava3.core.Single

 

・Disposablesが変わった
https://github.com/ReactiveX/RxJava/wiki/What’s-different-in-3.0#moved-components

//import io.reactivex.disposables.Disposables
import io.reactivex.rxjava3.disposables.Disposable

//コード
//private var aaa = Disposables.disposed()
private var aaa = Disposable.disposed()

 

・アダプタの修正
RetrofitのAdapterをRxJava3に変更する

//import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import retrofit2.adapter.rxjava3.RxJava3CallAdapterFactory;

//コード
//addCallAdapterFactory(RxJava2CallAdapterFactory.create())
addCallAdapterFactory(RxJava3CallAdapterFactory.create())

 

メソッドが一部存在しない
rxjava2
subscribe(Consumer<? super T> onNext, Consumer<? super Throwable> onError, Action onComplete, Consumer<? super Disposable> onSubscribe)
http://reactivex.io/RxJava/javadoc/

rxjava3
blockingSubscribe(@NonNull Consumer<? super T> onNext, @NonNull Consumer<? super Throwable> onError, @NonNull Action onComplete)
http://reactivex.io/RxJava/3.x/javadoc/
RxJava3で同じことするときには、doOnSubscribeに処理を書けばおk

 

これでRxJava3に移行できましたとさ

関連記事:

Pocket