2014-10-12 5 views
6

GET을 사용할 때 Android Volley를 사용하여 요청을 캐싱하지만 일부 이유로 POST를 사용하도록 전환했습니다. 이제 다른 POST 데이터로 동일한 URL을 캐싱하려고합니다.다른 POST 요청을 사용하는 Android Volley Caching

  • 요청 1 -> URL1, POST 데이터 = "고양이 = 1"
  • 요청 2 -> URL1, POST 데이터 = "고양이 = 2"
  • 요청 3 -> URL1, POST 데이터 = " 고양이 = 3 "

이 안드로이드 발리 Volley.Request.getCacheKey() 반환 내 경우 동일한 URL로

답변

12

와 함께 할 수있다; 이것은 나를 위해 작동하지 않았다.

대신 나는 URL + POST (= 키 값)

내가 다른 POST 데이터와 같은 URL에 한 모든 POST 요청을 캐시 할 수 있었다 그 방법을 반환하는 내 아이 클래스에서 getCacheKey()를 재정의했다 .

캐시 된 요청을 검색하려고 할 때 동일한 방법으로 캐시 키를 구성해야합니다.

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을 사용할 수있는 새로운 요청을 구성 이제까지 때() 먼저 요청 큐에 넣어 전에 캐시 요청에 대한 검색 :

그래서 여기 내 코드의 스냅 샷입니다.

이 정보가 도움이되기를 바랍니다. 당신은 당신이

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

(당신은 당신이 원하는대로 사용할 수 있습니다, 여기 JsonArrayRequest을 사용하고 있습니다)이 코드를 수행 할 수있는 기존 Request 클래스 중 하나를 사용하지 않으려는 경우 또한

+0

mParams 객체는 어디에 초기화합니까? 도와주세요! –

+1

감사합니다, 당신은 내 목숨을 구했습니다. –

+0

내 시간을 저장했습니다. –

2

여기 Mahmoud Fayez's answergenerateCacheKeyWithParam() 방법에 따라 :

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; 
} 
관련 문제