天天看点

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

的源代码。