前言:前段时间在开发app的时候,经常出现由于用户设备环境的原因,拿不到从网络端获取的数据,所以在app端展现的结果总是一个空白的框,这种情况对于用户体验来讲是极其糟糕的,所以,苦思冥想决定对okhttp下手(因为我在项目中使用的网络请求框架就是okhttp),则 写了这么一个网络数据缓存拦截器。
ok,那么我们决定开始写了,我先说一下思路:
思路篇
既然要写的是网络数据缓存拦截器,主要是利用了okhttp强大的拦截器功能,那么我们应该对哪些数据进行缓存呢,或者在哪些情况下启用数据进行缓存机制呢?
第一 :支持post请求,因为官方已经提供了一个缓存拦截器,但是有一个缺点,就是只能对get请求的数据进行缓存,对post则不支持。
第二 :网络正常的时候,则是去网络端取数据,如果网络异常,比如timeoutexception unknowhostexception 诸如此类的问题,那么我们就需要去缓存取出数据返回。
第三 :如果从缓存中取出的数据是空的,那么我们还是需要让这次请求走剩下的正常的流程。
第四 :调用者必须对缓存机制完全掌控,可以根据自己的业务需求选择性的对数据决定是否进行缓存。
第五 :使用必须简单,这是最最最最重要的一点。
好,我们上面罗列了五点是我们的大概思路,现在来说一下代码部分:
代码篇
缓存框架 :我这里使用的缓存框架是disklrucache https://github.com/jakewharton/disklrucache 这个缓存框架可以存储到本地,也经过谷歌认可,这也是选择这个框架的主要原因。我这里也对缓存框架进行封装了一个cachemanager类: