2014-10-12 5 views
6

मैं एंड्रॉइड वॉली का उपयोग कर कैश अनुरोधों का उपयोग कर रहा हूं, जब मैं जीईटी का उपयोग कर रहा था, लेकिन मैंने कुछ कारणों से POST का उपयोग करने के लिए स्विच किया। अब मैं एक ही यूआरएल को विभिन्न पोस्ट डेटा के साथ कैश करना चाहता हूं।विभिन्न POST अनुरोधों के साथ एंड्रॉइड वॉली कैशिंग

  • अनुरोध 1 -> URL1, पोस्ट डाटा = "कैट = 1"
  • अनुरोध 2 -> URL1, पोस्ट डाटा = "कैट = 2"
  • अनुरोध 3 -> URL1, पोस्ट डाटा = " बिल्ली = 3 "

इस Android वॉली

उत्तर

12
Volley.Request.getCacheKey() रिटर्न यूआरएल जो मेरे मामले में एक ही है के रूप में

साथ किया जा सकता है; इसने मेरे लिए काम नहीं किया।

इसके बजाय मैं अपने बच्चे कक्षा में getCacheKey() ओवरराइड करने के लिए URL + पोस्ट (कुंजी = मूल्य)

इस तरह मैं सभी पोस्ट अलग पोस्ट डेटा के साथ उसी यूआरएल से किए गए अनुरोधों को कैश करने में सक्षम था लौटना पड़ा ।

जब आप कैश किए गए अनुरोध को पुनर्प्राप्त करने का प्रयास करते हैं तो आपको उसी तरह कैश कुंजी बनाने की आवश्यकता होती है।

public class CustomPostRequest extends Request<String> { 
    . 
    . 
    private Map<String, String> mParams; 
    . 
    . 
    public void SetPostParam(String strParam, String strValue) 
    { 
     mParams.put(strParam, strValue); 
    } 

    @Override 
    public Map<String, String> getParams() { 
     return mParams; 
    } 

    @Override 
    public String getCacheKey() { 
     String temp = super.getCacheKey(); 
     for (Map.Entry<String, String> entry : mParams.entrySet()) 
      temp += entry.getKey() + "=" + entry.getValue(); 
     return temp; 
    } 
} 

जब कभी आप एक नया अनुरोध आप getCacheKey उपयोग कर सकते हैं का निर्माण पहले अनुरोध कतार में यह डालने से पहले कैश की गई अनुरोध के लिए खोज करने के लिए():

इसलिए यहाँ मेरी कोड का एक स्नैपशॉट है।

मुझे उम्मीद है कि इससे मदद मिलती है।

+0

आप mParams ऑब्जेक्ट को कहां प्रारंभ करते हैं? कृपया मेरी मदद करें! –

+1

धन्यवाद, आपने अपना जीवन बचाया। –

+0

आपने अपना समय –

2

इसके अलावा, अगर आप मौजूदा Request वर्गों में से एक का उपयोग करने के लिए इस कोड का पालन कर सकते हैं (मैं JsonArrayRequest यहाँ का उपयोग कर रहा है, तो आप जो कुछ भी आप चाहते हैं का उपयोग कर सकते)

Map<String, String> params = yourData; 

JsonArrayRequest request = new JsonArrayRequest(Request.Method.POST, url, 
    new Response.Listener<JSONArray>() { 
     ... Needed codes 
    }, 
    new Response.ErrorListener() { 
     ... 
    } 
){ 
    @Override 
    protected Map<String, String> getParams() throws AuthFailureError { 
     return params; 
    } 
    @Override 
    public String getCacheKey() { 
     return generateCacheKeyWithParam(super.getCacheKey(), params); 
    } 
}; 

नहीं करना चाहते और पर Mahmoud Fayez's answer, यहाँ generateCacheKeyWithParam() विधि आधारित:

public static String generateCacheKeyWithParam(String url, Map<String, String> params) { 
    for (Map.Entry<String, String> entry : params.entrySet()) { 
     url += entry.getKey() + "=" + entry.getValue(); 
    } 
    return url; 
} 
संबंधित मुद्दे