一網打盡OkHttp中的快取問題

2021-07-24 13:44:59 字數 2741 閱讀 7939

看到很多小夥伴對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檔案最頂部,其前邊不得有任何...