2015-09-05 27 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