2016-04-25 10 views
6

को कैसे संभालें I OkHttp का उपयोग कर एंड्रॉइड ऑफ़लाइन कैशिंग विधि करने का प्रयास कर रहा हूं। प्रवाह इस तरह है:एंड्रॉइड ओकेएचटीपी ईटीएजी

  1. मैं सर्वर से हेडर फ़ील्ड if-none-catched में एक ETag रिक्त स्ट्रिंग के साथ एक HTTP अनुरोध भेजना, और सर्वर एक उचित ETag देता है।
  2. फिर मैं ईटीएजी स्टोर करता हूं और प्रतिक्रिया को कैश करता हूं।
  3. अगली बार जब मैं एक ही सेवा कॉल को आग लगाता हूं तो मुझे एक ही ईटीएजी मिलती है और इसे HTTP अनुरोध शीर्षलेख पर सेट किया जाता है और अगर ईटीएजी समान होता है तो सर्वर HTTP 304 वापस कर देगा।

मेरा मुद्दा अब मैं ईटीएजी को कैसे स्टोर और पुनर्प्राप्त कर सकता हूं? क्या OkHttp डिफ़ॉल्ट संभाल लेंगे या मुझे SQLite पर स्टोर की आवश्यकता है? मैं Google पर OkHttp को इटाग नमूना कोड लागू करने के बारे में देख रहा हूं लेकिन मुझे बस सामान्य कैशिंग विधि मिलती है। लिंक मैं देखें:

  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

अब तक मैं क्या हासिल 1 समय सेवा कॉल के लिए केवल कैश है, लेकिन सर्वर से नवीनतम डेटा कभी नहीं मिल अब और। अगर कोई भी कुछ मार्गदर्शन प्रदान कर सकता है या ओकेएचटीपी के साथ साझा करने के लिए गतिशील रूप से हैंडल ETAT और if-none-catch का कोई अच्छा उदाहरण प्राप्त कर सकता है तो सराहना करें। कोई स्पष्टीकरण पूछने के लिए स्वतंत्र महसूस होता है।

उत्तर

7

आपको बस enable OkHttp’s response cache की आवश्यकता है। यदि आपका वेबसर्वर एक लौटाता है तो यह ईटाग का उपयोग करेगा।

+0

कोड का कौन सा हिस्सा okhttp प्रतिक्रिया कैश चालू/सक्षम करता है? मैं अपने okhttpClient में कैश ऑब्जेक्ट सेट करता हूं लेकिन यह मेरी प्रतिक्रिया को प्रभावित नहीं करता है, और मुझे हेडर – cloud

+1

के रूप में भी एटैग नहीं मिलता है क्या आपका सर्वर ईटैग भेज रहा है? कैश उसी यूआरएल के बाद के अनुरोधों पर 'em का उपयोग करेगा। –

+0

या अभी अपडेट किया गया है और सर्वर अब ईटैग भेजता है, अब मुझे 2 अंक मिल गए हैं: एक है कि मुझे अगले अनुरोध में शामिल होने के लिए पिछली प्रतिक्रिया से नया एटैग नहीं मिल सकता है; दूसरा, मैं परीक्षण के लिए ईटीएजी के अनुरोध को हार्डकोड करने का प्रयास करता हूं, मुझे प्रतिक्रिया से सफलतापूर्वक 304 मिलते हैं लेकिन कैश प्रतिक्रिया पढ़ने में असमर्थ हैं। और हेडर कैश-कंट्रोल "नो-कैश, अधिकतम आयु = 0" के साथ सर्वर प्रतिक्रिया भी, क्या इससे प्रभावित होता है? – cloud

संबंधित मुद्दे