2014-10-12 29 views
6

GET kullanırken bu iyi çalışıyor isteklerini önbelleğe almak için Android Volley kullanıyorum ancak bazı nedenlerle POST kullanmaya geçtim. Şimdi aynı URL’yi farklı POST verileriyle önbelleğe almak istiyorum.Farklı POST istekleri ile Android Volley önbellekleme

  • ayrıntılı 1 -> URL1 POST Verileri = "kedi = 1"
  • ayrıntılı 2 -> URL1 POST Verileri = "kedi = 2"
  • ayrıntılı 3 -> URL1 POST Verileri = " Kedi = 3"

bu Android Volley Volley.Request.getCacheKey() getiri benim durumumda aynıdır URL olarak

cevap

12

ile yapılabilir edilir; Bu benim için işe yaramadı.

Onun yerine URL + POST (anahtar = değer)

farklı POST veri ile aynı URL'ye yapılan tüm POST isteklerini önbelleğe başardı Bu şekilde dönmek Çocuğum sınıfta getCacheKey() geçersiz kılmak zorunda kaldı . Önbelleğe alınan isteği geri almayı denediğinizde, önbellek anahtarını da aynı şekilde oluşturmanız gerekir.

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; 
    } 
} 

Eğer getCacheKey kullanabilirsiniz yeni bir istek oluşturmak hiç zaman() ilk istekleri kuyrukta koymadan önce önbelleğe istek aramak için:

işte bir benim kod anlık görüntüsüdür.

Umarım bu yardımcı olur. Eğer

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); 
    } 
}; 

(sen ne istersen kullanabilirsiniz, burada JsonArrayRequest kullanıyorum) bu kodu takip edebilirsiniz varolan Request sınıfların birini kullanmak istemiyorsanız Ayrıca

+0

mParams nesnesini nereden başlatıyorsunuz? Lütfen bana yardım et! –

+1

Teşekkür ederim, hayatımı kurtardın. –

+0

zamanımı kaydettim –

2

ve burada Mahmoud Fayez's answer, generateCacheKeyWithParam() yöntem dayalı:

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; 
}