天天看點

Android本地資料存儲: Reservoir一:前言二: 在Android Studio上配置Reservoir庫三: 使用Reservoir存取資料四: 總結

今天做項目,準備使用本地存儲,把一些資料存在本地磁盤上,比如使用者名、密碼這樣的。其實大家都知道,這種情況最常用的就是sharedpreferences了,我也不例外,腦子裡第一個想到的就是用這個。。。後來轉念一想,有沒有啥開源的輕量級的庫,可以更好的幫我完成這件事呢,于是求助了度娘,果不其然,被我找到了兩個庫,reservoir和asimplecache。

原諒我沒有過多的去比較這兩個庫,直接采用了reservoir,去實作本地資料存儲。

啥是reservoir呢?

官方說,reservoir是一個簡單的android函數庫,可以在磁盤上使用“鍵/值”對輕松地序列化并持久化對象。說白了,使用reservoir,你可以把java對象進行序列化,并把它存儲到磁盤上。當然,當你想從磁盤上查找到你儲存的資料時,同樣需要時用reservoir。

2.1

在project的gradle上,你需要添加

repositories

{

    jcenter()

}

2.2

在你module的gradle上,你需要添加reservoir庫

dependencies

    compile 'com.anupcowkur:reservoir:2.1'

resrvoir在使用前,必須先進行初始化,一般情況下,我們會把該初始化操作方在application的oncreate()方法裡:

初始化是必須進行的操作,假設我們未進行reservoir的初始化,而直接使用它進行了資料的存取,則會出錯:

Android本地資料存儲: Reservoir一:前言二: 在Android Studio上配置Reservoir庫三: 使用Reservoir存取資料四: 總結

reservoir提供了put、putasync兩個方法進行對象資料的存儲,從名字就可以看出,一個是異步,一個是同步,本身并無多少差別,我們看下它提供了哪些存儲對象的方法:

Android本地資料存儲: Reservoir一:前言二: 在Android Studio上配置Reservoir庫三: 使用Reservoir存取資料四: 總結

為了示範對象的存儲,先提供一個person類:

接下來,我們使用put方法,存儲單個對象:

當然,我們也可以使用putasync

可以看出,putasync在方法中多了一個回調處理,可以用來處理資料是否被儲存到了磁盤上。

當然,除了儲存單個的對象外,reservoir支援儲存一個集合。

就這麼簡單,我們已經把一個list集合儲存到了本地磁盤中,接下來,讓我們看看,這些資料是以怎樣的格式存儲的。打開file

explorer/data/data/package name/cache/reservoir

Android本地資料存儲: Reservoir一:前言二: 在Android Studio上配置Reservoir庫三: 使用Reservoir存取資料四: 總結

沒錯,就是這幾個檔案,把它們導出來,打開看下,你會發現:

沒錯,就是json格式,對象被序列化後,是以json格式儲存在磁盤檔案中的。

資料既然可以存儲在磁盤上,當然可以讀取啦,這是毋庸置疑的。

與reservoir提供的put方法對應,它也提供了get方法,來讀取資料。

Android本地資料存儲: Reservoir一:前言二: 在Android Studio上配置Reservoir庫三: 使用Reservoir存取資料四: 總結

顧名思義,reservoir通過get及getasync兩個方法,可以讀取磁盤中的檔案。

讓我們看看代碼示例:

程式輸出:person{name='無緣', age=25, birthday=sat aug 22 15:09:16 gmt 2015, sex=true}

接下來,仔細看下上述代碼,注釋的部分,你會發現,我們先進行了一步判斷,這是必須要進行的一步,因為如果你不進行判斷的話,可能會出現key不存在情況,繼而會引發空指向異常

Android本地資料存儲: Reservoir一:前言二: 在Android Studio上配置Reservoir庫三: 使用Reservoir存取資料四: 總結

是吧,這更說明了上述進行contains key判斷的必要性。

當然,我們還可以取出集合資料:

有個地方需要注意的是,我們取出集合資料是,是直接把它指派給list,而不是list<person>,這說明了,取出來的資料,已經失去了泛型(即泛型擦除)。不信麼,那你看看:

運作:

Android本地資料存儲: Reservoir一:前言二: 在Android Studio上配置Reservoir庫三: 使用Reservoir存取資料四: 總結

很明顯,類型轉換異常,我們無法把list強轉為person,那如果我需要list<person>集合該怎麼辦呢?好辦,使用type呗:

再運作,看輸出:

當我們需要删除,或者是直接清空本地磁盤緩存時,reservoir也給提供了非常簡單的方法:

3.4.1 删除key值為person的資料緩存:

3.4.2 清空本地所有的緩存:

就是這麼簡單,就是這麼任性,簡單,好使,這就是reservoir。

通過上文的介紹,大家該知道reservoir是多麼的好用了吧,沒錯,簡單好使,這是它給我最直接的印象。更多的介紹,可以去看下reservoir

的源代碼。