我正在使用Android Volley緩存請求,這個工作正常,當我使用GET時,但由於某些原因我切換到使用POST。現在我想用不同的POST數據緩存相同的URL。Android排球緩存與不同的POST請求
- 請求1 - > URL1,POST數據= 「貓= 1」
- 請求2 - > URL1,POST數據= 「貓= 2」
- 請求3 - > URL1,POST數據=「貓= 3"
被這可以與Android凌空
我正在使用Android Volley緩存請求,這個工作正常,當我使用GET時,但由於某些原因我切換到使用POST。現在我想用不同的POST數據緩存相同的URL。Android排球緩存與不同的POST請求
被這可以與Android凌空
爲Volley.Request.getCacheKey()
回報這在我的情況是相同的URL來完成;這對我不起作用。
相反,我曾在我的子類覆蓋getCacheKey()返回URL + POST(鍵=值)
這樣,我就能夠緩存所有以不同的POST數據的相同URL所做的POST請求。
當您嘗試檢索緩存的請求時,需要使用相同的方法構建緩存鍵。
所以這裏是我的代碼的快照:
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一個新的請求()首先把它在請求隊列之前搜索緩存請求。
我希望這會有所幫助。
此外,如果你不想使用現有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;
}
你在哪裏初始化mParams對象?請幫幫我! – 2015-10-19 11:41:24
謝謝,你救了我的命。 – 2015-10-19 12:09:26
您節省了我的時間 – 2016-02-26 04:48:26