看到很多小夥伴對okhttp的快取問題並不是十分了解,於是打算來說說這個問題。用好okhttp中提供的快取,可以幫助我們更好的使用retrofit、picasso等配合okhttp使用的框架。ok,廢話不多說,我們來看看okhttp中的快取。
okhttp中的快取整體上來說我們要在兩個地方配置,乙個是構造okhttpclient時,還有乙個是在構造request時,一共就這兩處,那我們分別來看看。
1.在okhttpclient構造時設定快取路徑
2.構造request時配置快取策略
ok,那就一步一步來看吧。
我們在使用okhttp的時候,一般都會將client的獲取封裝起來,因為在大多數情況下,我們需要的okhttpclient其實都是一樣的。在封裝的過程中,我們可以設定很多屬性,比如鏈結超時時間、讀取超時時間等,其中也包括我們即將要說的cache,我們可以在這裡來配置cache路徑,配置了cache路徑之後,okhttp請求到的資料就會快取到該路徑下,當手機沒有聯網的時候,就可以直接從快取中載入資料。我們來看看**:
我這裡是設定了快取的路徑為~/mnt/sdcard/android/data/應用包名/cache/okhttpcache,第二個引數表示快取區的大小為10m,當快取區的資料大小超過10m的時候會自動刪除已快取的資料,當我們配置了快取路徑之後,當我發起乙個網路 請求之後,如下:
request request = new request.builder().url("").build();
client.newcall(request).enqueue(new callback()
@override
public void onresponse(call call, response response) throws ioexception
runonuithread(new runnable()
});} catch (jsonexception e) }}
});
請求完畢之後,用乙個textview將請求結果顯示出來,當請求完畢之後,在我們上面所說的那個目錄下,可以看到如下三個檔案:
上面的配置應該已經可以滿足許多小夥伴的需求了,可是很多時候我們還有許多其他的需求,那麼這些需求我們可以在構造request的時候通過cachecontrol來進行進一步的配置。
在構造request的時候,我們可以配置cachecontrol,配置有兩種方式,一種是構造cachecontrol,還有一種是直接使用cachecontrol中的常量,我們來分別看一下:
cachecontrol cc = new cachecontrol.builder()
//不使用快取,但是會儲存快取資料
//.nocache()
//不使用快取,同時也不儲存快取資料
// .nostore()
//只使用快取,(如果我們要載入的資料本身就是本地資料時,可以使用這個,不過目前尚未發現使用場景)
//.onlyifcached()
//手機可以接收響應時間小於當前時間加上10s的響應
// .minfresh(10,timeunit.seconds)
//手機可以接收有效期不大於10s的響應
// .maxage(10,timeunit.seconds)
//手機可以接收超出5s的響應
.maxstale(5,timeunit.seconds)
.build();
request request = new request.builder()
.cachecontrol(cc)
.url("").build();
這個用起來還是比較簡單的,沒什麼好說的,重要**看注釋。
如果直接使用cachecontrol中的常量,則不用呼叫上面那麼多的方法,使用方式如下:
request request = new request.builder()
//強制使用網路
// .cachecontrol(cachecontrol.force_network)
//強制使用快取
.cachecontrol(cachecontrol.force_cache)
.url("").build();
以上。 一網打盡OkHttp中的快取問題
看到很多小夥伴對okhttp的快取問題並不是十分了解,於是打算來說說這個問題。用好okhttp中提供的快取,可以幫助我們更好的使用retrofit picasso等配合okhttp使用的框架。ok,廢話不多說,我們來看看okhttp中的快取。okhttp中的快取整體上來說我們要在兩個地方配置,乙個是...
面試問題 一網打盡
恭喜,你已經擊敗對手,和雇主約定面試,也就是說你已經成為候選人。準備是面試成功的關鍵,所以我們為你一網打盡面試常見問題作為 演習 準備,開始 1 自我介紹 掌握你的發言時間。1 2分鐘較為適宜。以個人簡歷為引子,擴充套件豐富公司對你的了解,但不可離題萬里,切中要害是大原則。2 你最喜歡的大學課程是什...
PHP 亂碼問題一網打盡
關於php亂碼方面的諸多疑難雜症,在此提出以下解決方案助你解決亂碼問題 1.mysql query set names utf8 這是指定資料庫字符集,放在連線資料庫後 2.header content type text html charset utf 8 放在php檔案最頂部,其前邊不得有任何...