HTTP Ve Retrofit Cache 2
Merhaba, uygulamamızın network işlemlerini daha rahat yapması, sunuyu yormamak ve kullanıcıya daha iyi bir deneyim sunmak için yazdığım yazı serisinin sonuna geldik. Bu yazımda size cache işlemlerinin Retrofit’te nasıl yönetileceğini anlatacağım. Daha önceki yazılarımı okumadı iseniz aşağıdaki linklerden yazılarıma ulaşabilirsiniz.
- Picasso İle İmage Cache
- HTTP ve Retrofit Cache 1
- HTTP ve Retrofit Cache 2
- ExoPlayer İle Video Cache
Şimdi gelelim Android uygulamada nasıl cacheleme işleminin yapılacağına. Bunun için uygulamanıza Retrofit kütüphanesini eklemeyi unutmayın.
Bizim uygulamamızda Cache özelliğinin aktif olması için sunucudan gelen verileri bir şekilde telefonda tutmamız gerekmekte. Yani cache alanı sağlamamız lazım bunun için.
Bunun için ne kadar cache alanı belirliyeceğimizi ve cachenin tutulacağı yolu belirliyoruz. Peki sonra napıyoruz? Network işlemlerinde cacheli alanı kullanacağımızı belirtiyoruz. O da şu şekilde oluyor.
Evet artık uygulamamıza cache özelliği ekledik. Evet vallaha ekledik, şunu yapınca uygulamanız daha performanslı çalışıyor olacak. Bundan sonrası için daha önceki yazımızda belirttiğimiz HTTP’nin bize sunduğu nimetleri kullanacağız
Şimdi bir request verelim ve cachesiz verinin nasıl geldiğini ve cacheli verinin nasıl geldiğini gösterelim.
İlk önce şunu söylemem lazım Retrofit’te verinin cacheden geldiğini veya sunucudan geldiğini şöyle anlayabilirsiniz:
Servisi çağırdıktan sonra sunucudan gelen cevaptan “cacheResponseyi” çağırmanız yeterli;
Eğer bu değer “null” ise cevabınız sunucudan gelmiştir demektir.
Servisi çağırdık ve sonuca bakalım
Verimiz sunucudan gelmiş. Peki servisi şimdi tekrar çağıralım. Ne de olsa az önce çağırmıştık servisi cachelemiş olması lazım değil mi?
Artık cacheResponse null değil ama networkResponse’de null değil. Bir network Response status koduna bakalım ne gelmiş?
304 Not Modified gelmiş. Bu kodun ne işe yaradığını daha önceki yazımda anlatmıştım. Ne olduğunu anlamayan arkadaşlar daha önceki yazıma bakabilir.
Şimdi ne oldu sıra sıra gidelim
- Retrofit’e cache özelliği ekledik
- Herhangi bir servise istek gönderdik ve sunucudan dönen cevabı kaydettik
- Az önce request attığımız endpointe tekrar request attık ve sunucunun bize döndüğü cevaba göre ( 200 veya 304 ) veriyi cacheden gösterdik
Peki biz bu cache verilerini nerede saklıyoruz ?
Android studioda sağ tarafta bulunan “Device File Explorer” tabına basıp şu yolu takip edin
data/data/uygulamanın_paket_adi/cache
Bu klasörün altında Cachelenmiş json cevapları görebilirsiniz
Peki sunucuya hiç gitmeden nasıl sadece Cache’de ki verileri gösterebiliriz?
Bunun için daha önce yazdığım yazıda bulunan “Max-stale” parametresini headerda kullanabilirsiniz.
Ben getIntermediaries servisini belli bir süre boyunca client sunuya request vermeden kullanıcıya gösterebilirim.
Dikkat: Bu özelliği pek değişmeyen veriler için kullanın
604800 sn boyunca kullanıcı bu servisi çağırır ise sunucuya gitmeyeceğim. İlk requestte client sunucuya gidecek ve gelen veriyi kaydedecek peki 2. requestte ne olacak? Beklediğimiz sunucudan hiç cevap gelmeden kullanıcıya cacheden veri göstermek değil mi? Bakalım;
Gördüğünüz gibi sunucuya hiç gidilmemiş (network response boş) ve kullanıcıya cacheden veri gösterilmiş (cache response dolu )
Evet arkadaşlar Android Uygulamada nasıl Cacheleme işlemi yapılacağını 3 yazılık seri ile elimden geldiği kadarıyla anlattım. Umarım ki işinizi görür.
İyi günler :)