2017-01-12 44 views
0

檢查響應是否爲新的最佳方式是什麼不是來自緩存?其理由是我們只想在資產被修改的情況下進行一些昂貴的處理。檢查okhttp響應是否新鮮

目前,我們有以下幾點:

if ((response.networkResponse() != null && 
       response.networkResponse().code() == HTTP_NOT_MODIFIED) || 
       response.cacheResponse() != null) 

我不知道這是否是正確的/最好的/簡潔實現這一目標的方式。

+0

您是否可以在響應標題中添加時間戳以瞭解此響應的年齡?不是緩存迷,所以我可能會錯過一些東西;) – AxelH

+0

這是通過CDN提供的,所以我們不希望干擾標準的HTTP實踐。上面的代碼工作(我相信),我只是不確定這是否與okhttp這樣做的最好方法。 – Roman

回答

0

如果根本沒有緩存響應,則響應由緩存提供。無需檢查網絡響應。

+0

對於第一個請求它是否爲空?我不知道okhttp的內部結構,但是因爲我們啓用了緩存,可能它的行爲是「直寫」,並且cachedResponse總是!= null。 – Roman

+0

如果使用緩存,'cacheResponse()'只會是非空的。 –

+0

@Roman對於所有響應,我有同樣的問題,即'cacheResponse()!= null'。我發現[這個問題](https://github.com/square/okhttp/issues/3248)和[這個答案](https://stackoverflow.com/questions/41727750/detect-if-okhttp-response-comes -from-cache-with-retrofit/41729479#41729479)解釋這背後的原因。如果你想檢查一個響應是否完全來自緩存,我會檢查'cacheResponse()!= null && networkResponse()== null'。 – user2340612