RxJava 2 : Pengenalan dan Penanganan Exception

Mochamad Noor Syamsu
Javan Cipta Solusi
Published in
3 min readJun 1, 2018
http://androidsrc.net/

ReactiveX menjelaskan dirinya sebagai berikut

An API for asynchronous programming with observable streams

Pustaka ReactiveX dikembangkan untuk melakukan pemrograman asynchronous dengan menggabungkan pola observer, pola iterator, dan pemrograman fungsional. Menariknya, para pengembangnya menyediakan dukungan pustaka ke berbagai bahasa pemrograman.

ReactiveX Java (RxJava) bagi saya sangat berguna di bahasa pemrograman synchronous seperti java. Dengannya, kebutuhan untuk melakukan sesuatu secara paralel dan menulis kode agar tetap mudah dipelihara menjadi lebih mudah.

Contoh sederhana dari penggunaan RxJava adalah sebagai berikut

NB : contoh kode di artikel ini ditulis dengan bahasa kotlin.

import io.reactivex.Observable

object PlayGround {

@JvmStatic
fun main(args: Array<String>) {

Observable.just("a","b","c","d","e","f","g","h")
.concatMap {
Observable.just("$it transformed")
}
.subscribe(
{ println(it) }, //success callback
{} //error callback
)
}

}

Penggunaan Rx pada dasarnya terbagi menjadi 3 hal, yaitu observable, operator, dan observer.

Pada bagian pertama, kita membuat instance observable. Observable adalah instance yang akan di-observe data yang keluar darinya. Salah satu cara membuat observable seperti berikut

Observable.just(“a”,”b”,”c”,”d”,”e”,”f”,”g”,”h”)

Kemudian operator, bagian ini menentukan bagaimana kita mau mengolah data yang dikeluarkan oleh observable. Pada contoh di atas, kita melakukan transformasi data yang keluar dengan menambahkan string “ transformed”.

.concatMap {
Observable.just("$it transformed")
}

Selanjutnya adalah observer, observer bertugas untuk menentukan mau dibawa ke mana data hasil dari operator. Di sini yang kita melakukan observe dengan operator subscribe. Dalam operator subscribe ini kita memberikan observer dengan perintah untuk menampilkan data di layar.

.subscribe(
{ println(it) }, //success callback
{} //error callback
)

Berikut hasilnya saat kode di atas dijalankan

XKCD

Nah, bagaimana jika data yang muncul ada sesuatu yang tidak kita harapkan ?

Misalkan kita punya observable seperti ini

Observable.just("a","b","c","d","e","error","f","g", "h")

dan behavior yang kita harapkan adalah ketika data yang keluar string “error”, maka kita munculkan pesan error ke layar.

Kurang lebih kodenya seperti berikut

import io.reactivex.Observable

object PlayGround {

@JvmStatic
fun main(args: Array<String>) {

Observable.just("a","b","c","d","e","error","f","g", "h")
.concatMap {
if (it == "error") {
Observable.error(Exception("Error Happened !"))
} else {
Observable.just(it)
}}
.concatMap {
Observable.just("$it transformed")
}
.subscribe(
{ println(it) }, //success callback
{ exceptionHandler(it) } //error callback
)
}

fun exceptionHandler(e: Throwable) {
println(e.message)
}

}

Saya menambahkan satu operator lagi untuk menentukan apakah data yang keluar seperti yang diharapkan atau tidak. Jika data yang muncul ada string “error”, maka kita memberikan Observable.error() untuk diolah operator selanjutnya. Jika tidak, maka kita memberikan observable instance dari data yang keluar.

Oh, iya, pada kode blok if di atas kita membandingkan string menggunakan operator ==, di mana itu bisa dilakukan di kotlin. Jangan pernah lakukan hal yang sama di java, ya ! ;)

Ketika yang keluar adalah exception, Rx langsung menjalankan error handling. Kita tambahkan callback untuk menangani exception yang muncul. Perlu diingat, di blok kode error callback, it itu bertipe Throwable, ya !

Berikut hasil yang muncul jika kodenya dijalankan

Selamat mencoba RxJava !

--

--

Mochamad Noor Syamsu
Javan Cipta Solusi

Software engineer focusing around android, kotlin, and backend