Retrofit和OkHttp實現 Android網路快取

OpenGL發表於2018-03-16

前提:

沒做過網路快取這方面的功能,所以想學習下。上網看了很多的文章,也看了部分視訊。想把自己的一些小小的心德分享一下。如何能夠稍微幫助到別人,那對我來說就算是有意義了。廢話不多說了。進入正題。

1.網路請求

網路請求用的是Retrofit。用過的人,都知道優點。沒用過的人就照著圖示或者Demo去寫就好了,而且網上的文章一大堆,本人就不贅述了。

Retrofit和OkHttp實現 Android網路快取
網路請求的寫法

2.新增快取

重點來了,在網上看了許多的快取方法。到最後還是選擇了,OkHttp新增攔截器的這種方法。貌似用這種方法的人最多。

先來兩張圖,在做解釋。


Retrofit和OkHttp實現 Android網路快取

這裡設定了讀寫連線的超時時間。還設定了cookie的持久化。CookieJar有兩個回撥介面。用一個HashMap來儲存cookie,在saveFromResponse中儲存。在需要的時候在loadForRequest中取出。這樣就能每次請求中都攜帶Cookie了。


Retrofit和OkHttp實現 Android網路快取

這裡就是本文的重點如何快取了。

1.先獲取一個File例項,這個資料夾是專門用來儲存快取檔案的。

2.例項化一個Cache物件,他的第一個引數就是之前的File例項,第二個是資料夾的最大快取大小。

3.新增攔截器,Okhttp的攔截器是一個很好的東西。無論是統一新增header,還是通過HttpLoggingInterceptor將傳輸的資料通過log形勢答應出來,包括新增快取都需要用到它。首先我們要確定一個思維,就是快取的策略。在有網路的時候,我們成功獲取資料,同時將他快取到本地。當無網路的時候,從本地取出我們之前快取好的資料,進行載入。這樣就完成了資料的快取。快取的程式碼可以當做固定程式碼。網上也有很多講CacheControl的快取策略的。這裡也不贅述了。

3.注意事項

許可權問題,尤其是6.0以上需要動態申請。在授予許可權的時候需要注意。

另外,OkHttp的快取只能用於Get請求。OkHttp的Cache類中,對於GET以外的請求,都返回null。原始碼中也做出瞭解釋:不允許Get以外的請求,從技術上是允許post請求的。但是他的複雜度很高,實用性太低。

Retrofit和OkHttp實現 Android網路快取

結束語:

最後外加一個Demo的地址:

https://github.com/13046434521/CacheDemo

具體的程式碼有什麼不清楚的可以去這裡檢視。感謝各位親。至此,感謝!如果喜歡的話可以點波關注!風裡雨裡在這裡等你。哈哈,感謝!

Retrofit和OkHttp實現 Android網路快取


相關文章