Retrofit和OkHttp实现 Android网络缓存

前提:

没作过网络缓存这方面的功能,因此想学习下。上网看了不少的文章,也看了部分视频。想把本身的一些小小的心德分享一下。如何可以稍微帮助到别人,那对我来讲就算是有意义了。废话很少说了。进入正题。git

1.网路请求

网络请求用的是Retrofit。用过的人,都知道优势。没用过的人就照着图示或者Demo去写就行了,并且网上的文章一大堆,本人就不赘述了。github


网络请求的写法

2.添加缓存

重点来了,在网上看了许多的缓存方法。到最后仍是选择了,OkHttp添加拦截器的这种方法。貌似用这种方法的人最多。缓存

先来两张图,在作解释。cookie



这里设置了读写链接的超时时间。还设置了cookie的持久化。CookieJar有两个回调接口。用一个HashMap来保存cookie,在saveFromResponse中保存。在须要的时候在loadForRequest中取出。这样就能每次请求中都携带Cookie了。网络



这里就是本文的重点如何缓存了。post

1.先获取一个File实例,这个文件夹是专门用来保存缓存文件的。学习

2.实例化一个Cache对象,他的第一个参数就是以前的File实例,第二个是文件夹的最大缓存大小。3d

3.添加拦截器,Okhttp的拦截器是一个很好的东西。不管是统一添加header,仍是经过HttpLoggingInterceptor将传输的数据经过log形势答应出来,包括添加缓存都须要用到它。首先咱们要肯定一个思惟,就是缓存的策略。在有网络的时候,咱们成功获取数据,同时将他缓存到本地。当无网络的时候,从本地取出咱们以前缓存好的数据,进行加载。这样就完成了数据的缓存。缓存的代码能够当作固定代码。网上也有不少讲CacheControl的缓存策略的。这里也不赘述了。cdn

3.注意事项

权限问题,尤为是6.0以上须要动态申请。在授予权限的时候须要注意。视频

另外,OkHttp的缓存只能用于Get请求。OkHttp的Cache类中,对于GET之外的请求,都返回null。源码中也作出了解释:不容许Get之外的请求,从技术上是容许post请求的。可是他的复杂度很高,实用性过低。


结束语:

最后外加一个Demo的地址:

https://github.com/13046434521/CacheDemo

具体的代码有什么不清楚的能够去这里查看。感谢各位亲。至此,感谢!若是喜欢的话能够点波关注!风里雨里在这里等你。哈哈,感谢!

相关文章
相关标签/搜索