MVVM içinde LiveData Kullanımı

En son güncellendiği tarih: 6 gün önce



Merhaba arkadaşlar,

Yazımda sizlere Jetpack kütüphanesi olan LiveData'yı MVVM mimarisi içinde nasıl kullanacağımızı örnekleyerek anlatacağım


Hemen işleyerek öğrenmeye başlayalım :)


STEP-1-)

Öncelikle uygulamamızı oluşturuyoruz.

Android Studio >>Yeni Proje>>Empty Activity>>Proje İsminiz>>Finish Butonu


STEP-2-)

Kullanacağımız kütüphanelerimizi build.gradle(Module:app) üzerinden entegre ediyoruz.

Ekleyeceğimiz kütüphaneler:


STEP-3-)

Kütüphanelerimizin entegrasyon işlemini problemsiz bir şekilde sağladıysak hemen MainActivity’mize ait xml yapımızı düzenliyoruz.



STEP-4-)

Projemizde mimarimizin temeli olacak paketlerimizi ekliyoruz;

Eklememiz gereken paketler;

  • View

  • Service

  • Model

  • View Model



Kodlarımızın derli toplu olması adına oluşturmuş olduğumuz paketlerin dışında da paketler ekleyeceğiz fakat şimdilik bu kadarı kâfi :) View paketimizin altına hemen MainActivity sınıfımızı taşıyoruz.



STEP-5-)

Şimdi activity_main.xml içinde kullanmış olduğumuz RecyclerView’ın her bir elemanı için özel bir layout oluşturacağız.



  • Oluşturmuş olduğumuz layout’un API’mizde yer alan veriler içinde listelenmesini istediklerimizi dizayn ediyoruz.



STEP-6-)

Şimdi esas konumuza geçiyoruz;


MVVM (Model- View -View Model) Tanımı:

  • Model :Uygulama içinde kullanacağımız data katmanımızdır.

  • View: Uygulama içinde datalarımızı sunduğumuz katmandır.

  • ViewModel: Datalarımız ile datalarımızı sunduğumuz alanları arasındaki bağlanıyı sağlayacağımız katmandır.


STEP-7-) Hazırsak hemen model yapımızı oluşturalım;

Retrofit ile ilgili yazımda Postman ile nasıl verim aldığımı anlatmıştım.

Yine aynı şekilde Postman kullanarak API üzerinden Json verimizi alıyoruz,



fakat bu sefer model sınıfımızı yaratmak için bu siteyi kullanacağız.

  • Şekilde ki gibi ilgili alanı json verimiz ile doldurup generate butonuna tıklıyoruz.


  • Oluşan model sınıfımızı indiriyoruz.



  • Model paketimizin altına indirmiş olduğumuz model sınıfımızı ekliyoruz.



NOT: Ekleme işlemi ardından model sınıfınıza proje package’larınızı eklemeyi unutmayın! :)



STEP-8-)

Eğer Model işlemlerimizi tamamladıysak hemen RecyclerView yapımız için bir adapter oluşturalım bunun için öncelikle adapter paketimizi oluşturalım.



Adapter paketimiz altında bir adapter sınıfı oluşturalım. Entegre edeceğimiz fonksiyonların hangi amaçla kullanıldığını vb. bütün detayları Recyclerview Kullanımı yazımdan elde edebilirsiniz.


Sınıfımızın iskelet hali:


Sınıfımızdaki metotların doldurulmuş hali:


RecyclerView eklediğimiz activity_main.xml’e bir de resfresh için alanlar eklemiştik olası refresh işlemi için. Adapter'ımızın tekrar yeni veriler ile RecyclerView satırlarını doldurabilmesi için küçük bir güncelleme fonksiyonu ekliyoruz.



STEP-9-)

Adapter ile de işlemlerimiz bittiğine göre ViewModel katmanımıza geçebiliriz.

View katmanımıza ait MainActivity için bir ViewModel oluşturuyoruz.



  • ViewModel’imiz içinde LiveData kütüphanemizin bazı niteliklerini kullanıcağız. LiveDatayı kullanmamızın esas sebebi Bussiness mantığı ile UI’mızı ayırmak fakat bunun dışında aktivitemizin durdu vb. application'ın çökme durumlarının önüne geçebileceğimiz lifecycle işlemlerini de manuel oluşturmamıza gerek kalmayacaktır.



  • Şimdi refresh işlemimiz için ViewModel içerisine fonksiyonumuzu tanımlıyoruz fakat işlemleri ilerleyen süreçte tamamlayacağız.



STEP-10-)

ViewModel’imizi ilgili aktivitemiz içinde tanımlıyoruz. Hazır bu tanımı sağlamışken adapter tanımımızıda sağlıyoruz.



Bu tanımlarımızın değerlerinide atayalım:


STEP-11-)

  • Tanımlarımız tamam ise onStart fonksiyonumuzu override ediyoruz.

  • Hemen ardından içerisinde tanımlayacağımız observeLiveData fonksiyonumuzu oluşturuyoruz.


Bu fonksiyonumuz içinde ViewModelimiz ile sağlayacağımız verilerimizin veya alacağımız hatalara göre activity_main.xml dosyamız içinde tanımlamış olduğumuz elementlerimizin görünürlülük durumunu belirleyeceğiz.


Örneğin; refresh işlemi yapılıyorken progressbar'ımızın dönmesi ve recyclerview elementimiz ile error textView alanımız’ın görünmez olma durumu.



STEP-12-)

Şimdi Http Get operasyonumuzu sağlayacağımız ; Retrofit ve RxJava işlemlerimiz için alanlarımızı oluşturalım.


RxJava’yı en özet hali ile örneklersek;


Retrofit’in get fonksiyonu ile sağlamış olduğu veriyi gözlemlenebilir bir şekilde işleyebilmemize yardımcı olmakla beraber asenkron bir şekilde veri işlemlerini sağlamamıza yardımcı olmaktadır.


Ayrıca kullanım kılavuzunu incelerseniz kompleks veri yapılarında RxJava kullanmamız tavsiye ediliyor. :)

Kütüphanelerimizi projenin başlangıcında entegre etmiştik direkt kodlarımızı yazmaya başlayabiliriz;

  • Service paketimiz içinde API arayüzümüzü oluşturuyoruz.


  • BaseUrl’miz için sınıfımızı oluşturuyoruz.


STEP-13-)

Service paketimiz altında ilgili sınıfları tanımladığımıza göre bu sınıfların fonksiyonlarını hadi gelin hemen kullanalım;

  • Öncelikle ViewModel’imiz içinde veri çekme işlemini sağlayabileceğimiz fonksiyonumuzu oluşturalım.



  • Sonrasında API servisimizi kullanacağım için ViewModelimiz içinde tanımlıyoruz. Bununla birlikte CompositeDisposable tipinde bir Disposable tanımlıyoruz. Buradaki amacımız retrofit ile veri çekme işlemlerimizi tamamladıktan sonra arka planda yer kaplayan ve işleri örneğin call işlemlerinin sonlandırmaktır.



  • Veri çekme işlemlerimizi sağlayacağımız fonksiyonumuzu RxJava metodolojisi ile sağlıyoruz.



STEP-14-)

Son olarak RefeshLayout’umuz ile sağlayacağımız refresh fonksiyonumuzuda MainActivity’miz içinde tanımlıyoruz.


Ve Sonuç…



Konu anlatımı boyunca oluşturmuş olduğum projem!


Umarım faydalı olmuştur :)

Görüşmek dileğiyle…


#mvvm #livedata



0 yorum

Son Paylaşımlar

Hepsini Gör