Android RxJava

Buğra Yetkin
2 min readJan 31, 2021

Bugünün konusu async işlemler için kullanılan güçlü bir kütüphane olan RxJava olacak.ReactiveX’e ait olan bu kütüphane oldukça kullanışlı ve her isteğinize cevap verebilecek bir yapıya sahip.İlk başta biraz karışık gelebilir ama acele etmeden önce ne için kullanıldığını öğrenebilirsek sonrasında detaya girip istediğimiz şekilde genişletebiliriz RxJava ile yapabileceklerimizi.

Ufak bir bilgi ile devam edeyim belki biliyorsunuzdur ama yine de hatırlatmış olayım.Android’de çoğu işlem default’ta main thread’de yapılır (network istekleri main thread’de yapılamaz) bu yüzden her işlemi main thread’in üstüne yıkarsak performans açısından kayıp yaşarız ayrıca uygulama içi kitlenmeler,crash durumlarıyla karşı karşıya kalırız.Bugün ufak bir örnek ile internet isteği atıp gelen cevabı göstereceğimiz bir örnek olacak.Retrofit’i kullanabildiğinizi varsayarak devam ediyorum.

Basit bir GET isteği atıp gelen datayı loading-success-error durumlarını handle ederek ui katmanına taşıyacağız.Öncelikle service interface’imizi yazarak başlayalım.

@ Single → Tek sefer de request’i atıp response aldığımız durumlar için kullanılıyor.

@ Observable → Socket’e bağlanıp datayı sürekli dinleyeceğimiz zaman kullanılıyor.

@ Flowable → Observable’dan tek farkı gelen data beklediğimiz boyuttan fazla gelirse taşmalar olduğunda hatayı engeller.

@ onNext → Gözlemlediği datayı bize sunar.

@ onComplete → Yapılan işlemin bittiğini bildirmek için. Daha fazla dinlememesini sağlıyoruz.

@ subscribe → Datayı dinlemeye başladığımız kısım.

@ emitter → Anlık datanın durumunu verir.

Eğer atacağımız request’te loading durumunu da handle etmek istiyorsak bunun için bir Observable create etmemiz gerekecek.Burada emitter.onNext(Resource.loading()) diyerek datayı dinlemeye başlamadan önce loading durumunda olduğunu belirtiyoruz.Buradaki datayı viewModel katmanında subscribe olarak tekrardan dinlememiz gerekecek.

@ subscribeOn → İşlemlerin hangi thread’de yapılacağını belirtiyoruz.

@ observeOn → Gelen response’un nerede işlem göreceğini belirtiyoruz.

İnit içerisinde çağırmamızın amacı viewModel create edilir edilmez function’ın çalışmasını sağlıyoruz.Subscribe olacağımız durumlarda bir disposable’a ihtiyacımız var sonrasında clear ederek memory’i şişirmemesi için.Bunun için de compositeDisposable kullanarak bunun içersine add ile ekleyip sonrasında viewModel’ın onCleared() function’ında clear ediyoruz.Geriye sadece ui tarafında bu datayı observe etmemiz kaldı.

Bu arada proje içerisinde viewState kısmı var mantığını anlayabilirsiniz biraz inceleyerek.Benim de Halil Özcan sayesinde bilgim oldu teşekkürlerimi bir kez daha iletmiş olayım :)

İzlemenizi tavsiye ederim..

GitHub →Projeye buradan ulaşabilirsiniz.

DataBinding için daha önce yazdığım yazıya buradan ulaşabilirsiniz.

Daha geniş bahsettiğim Mvvm mimarisi için de buradan ulaşabilirsiniz örnek proje linki de yer alıyor github’ta inceleyebilirsiniz.

--

--