阻止Volley发送缓存标题 [英] Stop Volley from sending cache headers
问题描述
Volley继续发送 If-Modified-Since
标题。
我需要停止发送此标题因为它不断与来自第三方服务器的响应混淆。
更新:
$ b如何停止发送缓存标头?$ b
在 BasicNetwork.java
中,您会发现
private void addCacheHeaders(Map< String,String> headers,Cache.Entry entry){
//如果没有缓存条目,我们就完成了。
if(entry == null){
return;
if(entry.etag!= null){
headers.put(If-None-Match,entry.etag);
}
if(entry.lastModified> 0){
Date refTime = new Date(entry.lastModified);
headers.put(If-Modified-Since,DateUtils.formatDate(refTime));
$ b $ p
因此我认为你可以尝试以下方法之一:
- 调用
setShouldCache(false);
,例如: jsonObjectRequest.setShouldCache(false);
-
创建一个自定义的 BasicNetwork
您将覆盖 performRequest
并设置 Cache.Entry
变量null或 entry.lastModified< = 0
,可以尝试以下操作:
BasicNetwork basicNetwork = new BasicNetwork(hurlStack){
@Override
public NetworkResponse performRequest(Request<> request)throws VolleyError {
request.setCacheEntry(null);
// request.setShouldCache(false);
返回super.performRequest(request);
}
};
END OF UPDATE
您需要重写 getHeaders
方法,您可以尝试以下两种方法之一:
@Override
public Map< String,String> getHeaders()抛出AuthFailureError {
Map< String,String> headerMap = super.getHeaders();
if(headerMap.containsKey(If-Modified-Since)){
headerMap.remove(If-Modified-Since);
}
返回headerMap;
}
或
@Override
public Map< String,String> getHeaders()抛出AuthFailureError {
Map< String,String> headerMap = new HashMap<>();
headerMap.put(Content-Type,application / json);
// ...
//headerMap.put(其他键,其他值);
// ...
返回headerMap;
}
希望这有助于您!
Volley keeps sending If-Modified-Since
header.
I need to stop volley from sending this header because it keeps messing with a response from a third party server. How do I stop volley from sending cache headers?
解决方案 UPDATE:
In BasicNetwork.java
, you will find
private void addCacheHeaders(Map<String, String> headers, Cache.Entry entry) {
// If there's no cache entry, we're done.
if (entry == null) {
return;
}
if (entry.etag != null) {
headers.put("If-None-Match", entry.etag);
}
if (entry.lastModified > 0) {
Date refTime = new Date(entry.lastModified);
headers.put("If-Modified-Since", DateUtils.formatDate(refTime));
}
}
So I think you can try one of the following ways:
- Call
setShouldCache(false);
, for example: jsonObjectRequest.setShouldCache(false);
Create a custom BasicNetwork
variable, in which you will override performRequest
and set Cache.Entry
variable null or entry.lastModified <= 0
, can try the following:
BasicNetwork basicNetwork = new BasicNetwork(hurlStack) {
@Override
public NetworkResponse performRequest(Request<?> request) throws VolleyError {
request.setCacheEntry(null);
// request.setShouldCache(false);
return super.performRequest(request);
}
};
END OF UPDATE
IMO you need to override getHeaders
method, you can try one of the two following ways:
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> headerMap = super.getHeaders();
if (headerMap.containsKey("If-Modified-Since")) {
headerMap.remove("If-Modified-Since");
}
return headerMap;
}
or
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> headerMap = new HashMap<>();
headerMap.put("Content-Type", "application/json");
//...
//headerMap.put("other keys", "other values");
//...
return headerMap;
}
Hope this helps!
这篇关于阻止Volley发送缓存标题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!