2015-05-04 5 views
20

मैं ओकेएचटीपी के साथ वॉली संयोजन का प्रयास करना चाहता हूं लेकिन वॉली कैश सिस्टम और ओकेएचटीपी दोनों HTTP विनिर्देश में परिभाषित HTTP कैश पर भरोसा करते हैं। तो HTTP कैश की एक प्रति रखने के लिए OkHttp के कैश को कैसे अक्षम किया जा सकता है?OkHttp के साथ वॉली का उपयोग करते समय Http कैश को कॉन्फ़िगर कैसे करें?

संपादित करें: मैं क्या किया है

public class VolleyUtil { 
    // http://arnab.ch/blog/2013/08/asynchronous-http-requests-in-android-using-volley/ 
    private volatile static RequestQueue sRequestQueue; 

    /** get the single instance of RequestQueue **/ 
    public static RequestQueue getQueue(Context context) { 
     if (sRequestQueue == null) { 
      synchronized (VolleyUtil.class) { 
       if (sRequestQueue == null) { 
        OkHttpClient client = new OkHttpClient(); 
        client.networkInterceptors().add(new StethoInterceptor()); 
        client.setCache(null); 
        sRequestQueue = Volley.newRequestQueue(context.getApplicationContext(), new OkHttpStack(client)); 
        VolleyLog.DEBUG = true; 
       } 
      } 
     } 
     return sRequestQueue; 
    } 
} 

कौन सा OkHttpClient से https://gist.github.com/bryanstern/4e8f1cb5a8e14c202750

+0

आप हमें दिखा सकते हैं आप आपके उत्तर के लिए – Soham

+0

@Soham धन्यवाद क्या किया है, मैं अपने प्रश्न के लिए धन्यवाद फिर से संपादित किया है,। – Xiaozou

उत्तर

17

OkHttp संदर्भित है HttpUrlConnection तरह HTTP ग्राहक का एक प्रकार है जो HTTP कैश को लागू करता है, तो हम OkHttp का कैश अक्षम कर सकते हैं नीचे की तरह:

OkHttpClient client = new OkHttpClient(); 
client.setCache(null); 

फिर, हम HTTP सीएसी की एक प्रति रख सकते हैं वह वॉली द्वारा बनाए रखा।

बेहतर:

मैं Sotti के सवालों का जवाब देने की कोशिश करना चाहते हैं।

1 मैं जानना चाहता हूं कि वॉली और ओकेएचटीपी का उपयोग करते समय एक अच्छा कैश सेटअप क्या है।

मेरी प्रोजेक्ट में, मैं सभी वॉली अनुरोधों का उपयोग कर रहा हूं, सभी आरामपूर्ण एपीआई में क्यूईयू उदाहरण, और ओकेएचटीपी ने वॉली के लिए ट्रांसपोर्ट लेयर के रूप में काम किया है।

public class VolleyUtil { 
// http://arnab.ch/blog/2013/08/asynchronous-http-requests-in-android-using-volley/ 
private volatile static RequestQueue sRequestQueue; 

/** get the single instance of RequestQueue **/ 
public static RequestQueue getQueue(Context context) { 
    if (sRequestQueue == null) { 
     synchronized (VolleyUtil.class) { 
      if (sRequestQueue == null) { 
       OkHttpClient client = new OkHttpClient(); 
       client.setCache(null); 
       sRequestQueue = Volley.newRequestQueue(context.getApplicationContext(), new OkHttpStack(client)); 
       VolleyLog.DEBUG = true; 
      } 
     } 
    } 
    return sRequestQueue; 
}} 

2 हम वॉली पर या OkHttp कैश पर भरोसा करना चाहिए?

हां, मैं ओकेएचटीपी कैश के बजाय अपने HTTP कैश के लिए वॉली कैश का उपयोग कर रहा हूं; यह मेरे लिए बहुत अच्छा काम करता है।

3 बॉक्स से डिफ़ॉल्ट व्यवहार क्या है?

वॉली के लिए:

यह स्वचालित रूप से आप के लिए एक "वॉली" डिफ़ॉल्ट संचय निर्देशिका का निर्माण करेगा।

/** Default on-disk cache directory. */ 
private static final String DEFAULT_CACHE_DIR = "volley"; 


public static RequestQueue newRequestQueue(Context context, HttpStack stack, int maxDiskCacheBytes) { 
    File cacheDir = new File(context.getCacheDir(), DEFAULT_CACHE_DIR); 
    …… 
} 

OkHttp के लिए:

मैं स्रोत कोड में डिफ़ॉल्ट संचय नहीं मिल रहा है, और हम इस पोस्ट http://blog.denevell.org/android-okhttp-retrofit-using-cache.html

4. तरह प्रतिक्रिया कैश सेट कर सकते हैं सिफारिश व्यवहार क्या है और इसे कैसे प्राप्त करें?

रूप this पोस्ट का कहना है:

वॉली का अनुरोध, लोड हो रहा है, कैशिंग, थ्रेडिंग, तुल्यकालन और अधिक का ख्याल रखता है। यह जेएसओएन, छवियों, कैशिंग, कच्चे पाठ से निपटने के लिए तैयार है और कुछ अनुकूलन की अनुमति देता है।

मैं अनुकूलन की आसानी के कारण वॉली HTTP कैश का उपयोग करना पसंद करता हूं।

उदाहरण के लिए, हम इस Android Volley + JSONObjectRequest Caching तरह कैश पर बहुत अधिक नियंत्रण हो सकता है।

4

OkHttp कैश की अनदेखी करने के लिए सुंदर तरीका है:

request.setCacheControl(CacheControl.FORCE_NETWORK); 
+0

यह केवल यहां चर्चा के एक विशिष्ट अनुरोध के लिए है। https://github.com/square/okhttp/issues/1496 – Xiaozou

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