Pour commencer avec RXJava sous Kotlin, vous trouverez un article détaillé sur le lien suivant :
Je me suis appuyé sur cet article pour créer le projet disponible sur github
Dans ce projet, vous trouverez les méthodes suivantes dans l’activité principale :
Méthode 1
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) button.setOnClickListener { // Méthode 1 startRxStream() } } private fun startRxStream() { // Creation d'un observable val myObservable = getObservable() // Création d'un observer var myObserver = getObserver() myObservable.subscribe(myObserver) } private fun getObservable(): Observable<String> { return Observable.just("1", "2", "3", "4", "5") } private fun getObserver(): Observer<String> { return object : Observer<String> { override fun onSubscribe(d: Disposable) { } override fun onNext(s: String) { Log.d(TAG, "onNext : $s") } override fun onError(e: Throwable) { Log.d(TAG, "On Error : ${e.message}") } override fun onComplete() { Log.d(TAG, "OnCompletable startRxStream1") } } }
Cette méthode correspond à celle décrite dans l’article ci-dessus.
Méthode 2
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) button.setOnClickListener { // Méthode 2 startRxStream2() } } private fun startRxStream2() { Observable.just("14", "15", "16", "17") .doOnNext { Log.d(TAG, "onNext : $it") } .doOnComplete { Log.d(TAG, "OnCompletable startRxStream2") } .doOnError { Log.d(TAG, "On Error : ${it.message}") } .subscribe() }
Méthode 4
Class MainActivity
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) button.setOnClickListener { // Méthode 4 startRxStream4() } } private fun startRxStream4() { Observable.just("21", "22", "23", "24") .ioToMainThread() // Utilisation d'une extension pour factorisation .subscribe() }
Class ThreadExtension.kt – Permettant de créer une extension ioToMainThread() à Observable
import android.util.Log import io.reactivex.Observable import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.schedulers.Schedulers fun <T> Observable<T>.ioToMainThread(): Observable<T> = subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .doOnNext { Log.d("ThreadExtension", "onNext : $it") }
Le projet est disponible sur github.