阻止 Volley 发送缓存 headers
Stop Volley from sending cache headers
截击不断发送If-Modified-Since
header.
我需要阻止 volley 发送这个 header 因为它一直在干扰来自第三方服务器的响应。如何阻止 volley 发送缓存 headers?
更新:
在BasicNetwork.java
中,你会发现
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));
}
}
所以我认为您可以尝试以下方法之一:
- 调用
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);
return super.performRequest(request);
}
};
更新结束
IMO 你需要覆盖 getHeaders
方法,你可以尝试以下两种方式之一:
@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;
}
或
@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;
}
希望对您有所帮助!
截击不断发送If-Modified-Since
header.
我需要阻止 volley 发送这个 header 因为它一直在干扰来自第三方服务器的响应。如何阻止 volley 发送缓存 headers?
更新:
在BasicNetwork.java
中,你会发现
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));
}
}
所以我认为您可以尝试以下方法之一:
- 调用
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); return super.performRequest(request); } };
更新结束
IMO 你需要覆盖 getHeaders
方法,你可以尝试以下两种方式之一:
@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;
}
或
@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;
}
希望对您有所帮助!