MVP Retrofit RxJava RecyclerView Kullanımı

Merhaba arkadaşlar,
mobilhanem.com üzerinden anlattığımız/yayınladığımız derslere bugün sizlere MVP Retrofit RxJava Glide RecyclerView Kullanımı nı bir arada anlatan bir uygulama yapacağım. Bu derse başlamadan önce RecyclerView ve CardView kullanımı ile ilgili bu dersimizi incelemeniz faydalı olacaktır.

Öncelikle MVP den başlayalım. Android projelerimizin yapısını oluştururken çeşitli tasarım kalıplarına (Design Patterns) ihtiyaç duyarız. MVC, MVP, MVVM, MVI gibi bir çok tasarım kalıpları vardır. Tasarım kalıpları ile detaylı anlatım için bu linki inceleyebilirsiniz. MVP ( Model – View – Presenter ) ile asıl amaç kullanıcı arayüzü ile iş mantığını birbirinden ayırmaktır.

MVP Genel Yapısı

 

RecyclerView android uygulamalarımızda listeleme işlemlerini gerçekleştirebilmemiz için kullandığımız view öğesidir.

Retrofit açık kaynak kodlu oluşturulmuş rest istemcisidir. Yapacağımız uygulamada; belirli bir url adresinde API ile dışarı açılmış verileri çekip RecyclerView de listeleyeceğiz. İşte bu API ye istek atabilmeyi Retrofit kütüphanesi ile sağlıyoruz.

Asenkron işlemleri daha performanslı bir şekilde yönetebilmek ve reaktif programlama anlayışını daha basit bir şekilde özümseyebilmek için RxJava ya ihtiyaç duyarız.

Glide;  resim, gif ve video’ları kolayca uygulamamıza dahil edip, memory ve disk cache gibi mekanizmaları kendi içerisinde barındıran ve kolayca çözümler sunan; açık kaynak bir kütüphanedir.

Hepsinden kısaca bahsettiğimize göre şimdi örnek bir proje oluşturalım daha sonra build.gradle kısmında kullanacağımız kütüphaneleri ekleyelim.

Retrofit kütüphanesi için:

RxJava kütüphanesi için:

Glide kütüphanesi kullanımı için ise aşağıdaki kod parçalarını build.gradle da dependencies kısmına ekliyoruz.

build.gradle dosyamızın son hali ise aşağıdaki gibi olacaktır.

build.gradle

Daha sonra aşağıdaki gibi bir yapı oluşturmalıyız. Gördüğüz gibi çeşitli parçalara böldük ve paketler oluşturduk. Her bir paketin altına da ilgili dosyaları oluşturacağız. Böylece daha anlaşılır ve okunabilir bir paket yapısına sahip olduk.

İstek atacağımız api yi belirtmemiz gerekiyor bu yüzden Const adını verdiğimiz bir java sınıfı oluşturuyoruz. İçerisine de base url adresini yazıyoruz.

Const.java

Api den dönen cevapta çeşitli filimler ve filimlere ait resimler bulunmaktadır. Bu filimlerden dönen cevapları tutabileceğimiz bir model sınıfına ihtiyaç var bu yüzden de Movie adını vereceğimiz bir java sınıfı oluşturuyoruz. Movie sınıfınıda yukarıda oluşturduğumuz model adını verdiğimiz paket içine atıyoruz.

Movie.java

Movie leri listeleyeceğimiz için görsel olarak bir şablona ihtiyacımız var. movie_item adını verdiğimiz xml layout dosyamızı oluşturuyoruz.

movie_item.xml

Listeleme yapabilmemiz için şimdi bir adapter sınıfına ihtiyacımız var ve MovieAdapter adını verdiğimiz adapter sınıfını oluşturuyoruz. Bu sınıfı da adapters paketi içine atıyoruz.  Aşağıda gördüğünüz gibi Adapter sınıfı işleyeceği veriyi alıyor. Movie tipinde verileri tutan listeden de filimin ismini TextView e, resmini de Glide kütüphanesi yardımı ile ImageView e set ediyoruz.

MovieAdapter.java

Adapter sınıfımızı da oluşturduğumuza göre şimdi MVP yapısını oluşturabilmemiz için IMovieContract adını verdiğimiz bir interface oluşturuyoruz. Aşağıda gördüğünüz gibi View katmanına ait interface bloğu ve Presenter katmanına ait interface bloğu yer almaktadır. interface blokları içinde de ilgili methodlarımız bulunmaktadır.

IMovieContract.java

Şimdi IMovieService adını verdiğimiz bir interface sınıfını oluşturuyoruz ve services paketi içine atıyoruz. Aşağıdaki kod yapısını incelediğimizde; yukarıda belirttiğimiz base url e get methodu ile istek atıyoruz ve istek atarkende url in kalan kısmını belirtiyoruz. getMovieList methodu çağırıldıktan sonrada Observable sonucunu dönüyoruz.

IMovieService.java

MoviePresenter adını verdiğimiz java sınıfını oluşturuyoruz ve daha önce oluşturduğumuz Presenter dan implements ediyoruz. Constructor methodunda dışarıdan bir view aldığını görüyorsunuz. Presenter burada view e bağımlı ve yukarıda anlattığım model view presenter yapısınıda daha belirgin bir şekilde oluşturuş oluyoruz. fetchMovies methodunda ise; Rxjava ile Retrofit bileşenlerini bir arada kullanıyoruz. onNext methodunda ise api den istek atıp da dönen sonucu gösterebilmek için view in loadList methoduna gönderiyoruz. Bu istek attığımız sırada sunucudan cevap dönene kadar kullanıcıya bir Progress çıkarması gerektiğini belirtiyoruz işte o işlem ui yani arayüzü ilgilendirdiği için yarattığımız view interface içinde yer alan methodları kullanarak gerekli tanımlamaları yapıyoruz.

MoviePresenter.java

Şimdi MainActivity nin layout xml kısmını oluşturalım;

activity_main.xml

Son olarak MainActivity sınıfını oluşturalım. Aşağıdaki kod yapısına baktığımızda gayet sade ve okunaklı bir yapı oluştuğunu göreceksiniz. İlgili activity sınıfımızda satırlarca işlem yok MVP sayesinde view ile uygulama logic ini birbirinden ayırdık. MoviePresenter sınıfımızı yarattık daha sonrasında da gerekli işlemleri çalıştırdık. Kaynak kodu indirip çalıştırdığınızda ve debug yaptığınızda çalışma mantığının nasıl olduğunu daha iyi anlayacaksınız.

MainActivity.java

Ekran çıktısı:

Evet arkadaşlar MVP Retrofit RxJava Glide RecyclerView Kullanımını temel bir proje yaparak sizlere anlatmaya çalıştım. Bu kavramları bir arada kullanmak tam anlamıyla ne işe yaradıklarını daha iyi kavrayabilmemizi sağlayacaktır. Rxjava gerçekten çok kapsamlı bir konu ayrıntılı olarak değinmedim sadece temel bir kullanım yaparak sizlere göstermeye çalıştım. Umarım herkese faydalı olur. Bir sonraki derste de Dagger konusunu anlatacağım ve bu proje üzerinde Dagger in nasıl kullanılacağını göstereceğim.

Tüm Android Ders, Proje ve Kaynak Kodlar için tıklayınız.

Mobilhanem.com üzerinden anlattığımız android uygulama geliştirme derslerine devam edeceğiz. Konu hakkında sorunuzu yorum alanından sorabilirsiniz. Konu dışı sorularınızı ve tüm yazılımsal sorularınızı sorucevap.mobilhanem.com sitemizden de sorabilirsiniz.

Bir dahaki dersimizde görüşmek dileğiyle..

Alper Beyler

Yüksek Lisans: Çankaya Üniversitesi / Bilgisayar Mühendisliği
Lisans: Çankaya Üniversitesi / Bilgisayar Mühendisliği (4/3.30) (2010-2014)
Lisans : Viyana Teknik Üniversitesi / Bilgisayar Bilimleri (2013)

Yorum Yaz

Haftalık Bülten

Mobilhanem'de yayınlanan dersleri haftalık mail almak ister misiniz?