okhttp或者retrofit實現網絡緩存504錯誤原因

  • 這兩天在做網絡請求的緩存,我用的是retrofit2.1.0
  • retrofit 實現緩存,其實質是okhttp實現網絡緩存。
  • 但是在這個工程中,遇到了一個問題 返回錯誤碼 504,緩存數據沒有讀出來。

先說重點:

原因其實原因很簡單:我的url中有個公共參數,
我的url是這樣的

https://tc****.h****.cn/get_carousel_list?versionName=1.6.3&clientType=Nexus6_android_&
net=wifi&user_id=8d16a137d5cc, tag=null

發現了嗎?我的公共參數中有net這個值,
當我聯網緩存的時候是net的值是wifi3GLTE
當我斷網的時候net的值是disconnection
這就是我緩存失敗的原因。
因爲我們所有的數據是對url進行了MD5後,作爲文件名,
包數據寫對應的文件中。當我們網絡狀態改變的時候,
我們得到的MD5的值更本不是同一個,
所以,我們更本無法拿到我們正確的緩存文件。

結論
504 錯誤歸根究竟是緩存沒有找到。
沒找到的原因是緩存對應的url改變了,
錯使MD5後文件名改變,因此沒有找到url對應的緩存。

解決辦法
方法1、和服務端協商,將url中的公共參數,例如net的狀態放在header中。
方法2、去掉net這個參數,是url保持固定,不要變動。
方法3、還沒想的,只要能讓人你的url保持不變的方法都可行。

一點總結
其實緩存的實現方法,網上油無數的博客都做了詳細的說明。
這裏不做闡述。

出了問題,我爲解決這個問題,翻遍了網上的所有博客,
以爲是緩存使用的不對,還懷疑是自己的攔截器不對,
懷疑的問題很對。可是似乎就我這裏有問題,
博客上沒有任何闡述相關問題。大家視乎用的都很順利。

其實這個問題也不難想到,只是自己當時面對整個未知的框架,
未知的緩存,最重要的是覺得未知的太多。
所以沒有深入的去思考這個問題。

其實我們遇到問題時候,應該靜心去思考問題。
分析問題,這樣我們才能成長,才能進步。
我這次就花費了不少時間,問題在於我沒有好好靜心分析這些問題。
希望大家也引以爲戒。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章