2015-09-05 25 views
2

排球继续发送If-Modified-Since标题。停止排队发送缓存标题

我需要停止发送此头,因为它不断与第三方服务器的响应混乱。如何停止发送缓存头文件?

+0

嗨!你能告诉我我的答案是否适用于你的问题? – BNK

+0

@BNK它没有:/ – Alex

回答

3

UPDATE:

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变空或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; 
     } 

希望这有助于!

+1

太棒了!更新的答案工作:) – Alex