阻止Volley发送缓存标题 [英] Stop Volley from sending cache headers

查看:100
本文介绍了阻止Volley发送缓存标题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆