2016-04-25 38 views
6

nasıl işleneceğini ı OkHttp kullanan Android çevrimdışı önbelleğe alma yöntemini yapmaya çalışacağım ediyorum.Android OkHttp ETag

  1. Ben sunucuya başlık alanı if-none-catched bir ETag boş dize ile bir HTTP isteği göndermek ve sunucu düzgün bir ETag döndürür: akış böyledir.
  2. Ardından ETag'ı saklayıp yanıtı önbelleğe kaydediyorum. Ben de aynı ETag olsun aynı hizmet çağrısı ateş ve HTTP isteği üst ayarlayın ve ETag aynıysa sunucu HTTP 304 dönecektir
  3. dahaki sefere.

Sorunum şimdi nasıl depolamak ve ETag alabilir mi? OkHttp varsayılanı işleyecek mi yoksa SQLite'de depolamaya mı ihtiyacım var? Google'da OkHttp uygulamasında ETag örnek kodunu uyguladığımı görüyorum ancak tek elde ettiğim şey normal önbelleğe alma yöntemidir. Bağlantı ben bakın:

  1. I'm trying to use Java's HttpURLConnection to do a "conditional get", but I never get a 304 status code
  2. https://github.com/square/okhttp/wiki/Interceptors
  3. Correct way of setting up cache for OkHttp in Android
  4. https://gist.github.com/polbins/1c7f9303d2b7d169a3b1#file-restcontroller-java-L45

bugüne kadar ben neler kazandığınızı 1 saati hizmet araması için önbellek, ancak sunucudan son verileri asla artık. Herhangi bir rehberlik sağlayabilir veya paylaşmak için OkHttp için dinamik olarak ETag ve if-none-catch dinamik öğelerinin iyi bir örneğini bulabilirseniz teşekkür ederiz. Herhangi bir açıklama sormaktan çekinmeyin.

cevap

7

Sadece enable OkHttp’s response cache gerekir. Web sunucunuz bir tane döndürürse ETAG'yi kullanır.

+0

Kodun hangi bölümü okhttp yanıt önbelleğini açar/etkinleştirir? okhttpClient'e önbellek nesnesi koyarım ama yanıtımı etkilemedi ve etag'i geri dönme bile olmadı – cloud

+1

Sunucunuz ETags gönderiyor mu? Önbellek, aynı URL için sonraki isteklerde kullanacaktır. –

+0

ya şimdi güncellendi ve sunucu şimdi ETags gönder, şimdi 2 sorun var: Bir sonraki isteği eklemek için önceki yanıttan yeni etag alamıyorum; Başka bir şey test için ETags isteği kodlamak çalışıyorum, başarıyla yanıttan 304 almak ama önbellek yanıtını okuyamıyorum. Ayrıca önbellek Önbellek Denetimi "no-cache, max-age = 0" ile sunucu yanıtı, bu etkiliyor mu? – cloud