Reactive Programming, buzzword yang cukup populer 2 tahun terakhir dalam berbagai bidang pengembangan software baik mobile dan web.
Konsep Reactive Programming memudahkan kita untuk melakukan multi-threading dalam program kita sehingga kode lebih manageable. Sehingga penerapan konsep Reactive sendiri akan sangat sering kita jumpai dalam Asynchronous Request dan Event-Driven Programming yang sangat dependen terhadap proses threading.

Dalam post ini kita akan mencoba bagaimana memulai menggunakan library RxJava di Android Studio.

image credit: http://tomstechnicalblog.blogspot.co.id/2016/02/rxjava-understanding-observeon-and.html

Project di sini adalah project pengenalan sederhana dalam menggunakan RxJava dimana input user akan kita print ulang menjadi UPPER CASE.

  • Mulai Empty Project di Android Studio seperti biasa
  • Masukkan:

ke dalam bagian dependencies { .. } di file gradle.build

Setelah itu kita sinkronisasi ulang gradle nya agar library Rx terbaca dalam project.

  • Siapkan layout activity_main.xml sebagai berikut. TextView dengan id : @id/textView dan EditText dengan @id/editText.

  • Dalam file Java MainActivity.class, di dalam method onCreate tambahkan

setelah

  • Nah, di bagian ini yang cukup menarik. Dalam Pemrograman Reaktif ada 2 aktor utama yang saling berinteraksi, mereka disebut Observer dan Observable. Beberapa istilah lain juga sering digunakan seperti: Subscriber/Publisher atau Consumer/Producer. Ada sedikit perbedaan di masing-masing istilah(read more).
  • Dalam step ini kita akan membuat objek Observable. Role Observable ini akan me-notify Observer setiap kali emitter nya dipanggil sehingga Observer akan melakukan sesuatu sesuai dengan kodenya.
    Untuk membuat Observable kita tambahkan kode berikut:

dan override method ‘subscribe’ dari interface dengan perintah alt+enter sehingga didapatkan kode berikut:

  • Setelah itu karena kita ingin emitter dipanggil setiap kali ada perubahan di editText, kita tambahkan kode berikut di dalam method ‘subscribe’ di atas:

Perhatikan line if(s.toString().equalsIgnoreCase(“stop”)) e.onComplete(); di sini kita memberikan perintah jika input adalah ‘stop’ maka hentikan emitter.

  • Nah, di step ini kita akan menyiapkan Observernya dengan menambahkan kode berikut:

    dan kita harus implement 4 methods yaitu:

    • onSubscribe(Disposable d) : Method yang pertama kali dipanggil setelah Observable terkoneksi dengan Observer.
    • onNext({Type} t) : Method ini memberikan data yang akan akan diproses dan mendefine bagaimana aksi Observer terhadap data. Method ini tidak akan dapat dipanggil lagi setelah onError atau onComplete dipanggil.
    • onError(Throwable e) : Method ini dipanggil ketika terjadi error.
    • onComplete() : Dipanggil sehingga Observable tidak mengirim notifikasi lagi terhadap Observer dan stream data sudah selesai.

Untuk implementasi dalam project ini kita akan menambahkan kode sebagai berikut:

  • Selanjutnya kita akan menghubungkan antara Observer dan Observable dengan menggunakan command ini:
    subscribe(editTextObserver);

Sampai tahap ini, jika kita run aplikasi maka setiap text yang ditulis dalam editText akan ditampilkan ulang di textView

  • Nah, ada satu aktor tambahan lagi selain Observable dan Observer yang belum kita mention dari tadi yaitu Operator. Pada dasarnya operator ada banyak sekali dan ini dapat dibaca di sini (read more). Dalam tutorial ini kita akan menggunakan operator ‘map’ yang merupakan salah satu operator transformasi, yaitu operator yang dapat mengubah bentuk item yang dikirimkan oleh Observable.
    Untuk mencoba ini kita akan mengubah sedikit kode di step 9 menjadi :

Yang akan mengambil input string dan mengubahnya menjadi string UPPER CASE

sebelum diberkan kepada Observer.
.

.

Yay! Aplikasi kita sudah selesai!
Mungkin Anda pikir ini terlalu ribet untuk sekedar membuat aplikasi yang mengubah huruf kecil ke huruf besar. Memang benar :D, tapi ini karena kita hanya mencoba mengenal bagaimana dasar dalam menggunakan RxJava dengan contoh yang sangat simpel. Jika project Anda besar dan membutuhkan konkurensi yang banyak, maka untuk memanage-nya Reactive Programming akan sangat membantu.

Sebenarnya masih banyak aspek yang belum sempat dibahas dalam tutorial ini seperti operator observeOn dan subscribeOn yang akan sangat digunakan untuk membuat program multi-thread dan asynchronous, atau tipe-tipe Scheduler yang akan membantu kita dalam menyiapkan dan mendefinisikan threads, terutama yang berkaitan untuk Android yang dapat kita temukan di library RxAndroid. serta masih banyak lainnya yang mungkin belum sempat tercover.

Tapi kami harap tutorial ini bisa membantu Anda untuk memulai dan memahami dasar-dasar RxJava dan penggunaannya di dalam pengembangan aplikasi Android.

Terima kasih! ^^