Android实现离线缓存的方法

 更新时间:2016年03月16日 11:52:59   作者:Leo.Han  
离线缓存就是在网络畅通的情况下将从服务器收到的数据保存到本地,当网络断开之后直接读取本地文件中的数据。本文给大家介绍Android实现离线缓存的方法,需要的朋友参考下

 离线缓存就是在网络畅通的情况下将从服务器收到的数据保存到本地,当网络断开之后直接读取本地文件中的数据。如Json 数据缓存到本地,在断网的状态下启动APP时读取本地缓存数据显示在界面上,常用的APP(网易新闻、知乎等等)都是支持离线缓存的,这样带来了更好的用户体验。

如果能够在调用网络接口后自动缓存返回的Json数据,下次在断网状态下调用这个接口获取到缓存的Json数据的话,那该多好呢?Volley做到了这一点。

因此,今天这篇文章介绍的就是使用Volley自带的数据缓存,配合Universal-ImageLoader的图片缓存,实现断网状态下的图文显示。

实现效果

这里写图片描述

如何实现?

1.使用Volley访问网络接口

/**
* 获取网络数据
*/
private void getData() {
StringRequest stringRequest = new StringRequest(Request.Method.POST, TEST_API, new Response.Listener<String>() {
@Override
public void onResponse(String s) {
textView.setText("data from Internet: " + s);
try {
JSONObject jsonObject = new JSONObject(s);
JSONArray resultList = jsonObject.getJSONArray("resultList");
JSONObject JSONObject = (org.json.JSONObject) resultList.opt(0);
String head_img = JSONObject.getString("head_img");
ImageLoader.getInstance().displayImage(head_img, imageView);
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
}
}) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> map = new HashMap<String, String>();
map.put("phone", "15962203803");
map.put("password", "123456");
return map;
}
};
queue.add(stringRequest);
}

当接口访问成功以后,Volley会自动缓存此次纪录在/data/data/{package name}/cache/volley文件夹中。

这里写图片描述 

打开上面的文件,可以发现接口的路径和返回值都被保存在该文件里面了。

这里写图片描述 

当在断网状态时,如何获取到该接口的缓存的返回值呢?
使用RequestQueue提供的getCache()方法查询该接口的缓存数据

if (queue.getCache().get(TEST_API) != null) {
String cachedResponse = new String(queue.getCache().get(TEST_API).data);

2.使用Universal-ImageLoader加载图片

ImageLoader.getInstance().displayImage(head_img, imageView);

注意点

1.观察上面的缓存文件可以发现,Volley只缓存了接口路径,并没有缓存接口的传入参数,因此如果做分页查询的话,使用此方法是不妥的。

2.在测试过程中,依然发现有的时候获取不到缓存数据,有的时候却可以获取到。对获取缓存的代码延迟加载能够有效解决这个问题。

3.如果考虑到缓存的过期策略,可以使用更好的ASimpleCache框架辅助开发。对缓存有更高要求的APP,依然应该使用文件缓存或数据库缓存。

以上内容是小编给大家介绍的Android实现离线缓存的方法,希望对大家有所帮助!

相关文章

  • 超实用的Android手势锁制作实例教程

    超实用的Android手势锁制作实例教程

    这篇文章主要介绍了一个超实用的Android手势锁制作实例教程,普通的圆环形图标变换,在App和系统的锁屏界面中都可以调用,需要的朋友可以参考下
    2016-04-04
  • react native android6+拍照闪退或重启的解决方案

    react native android6+拍照闪退或重启的解决方案

    android 6+权限使用的时候需要动态申请,那么在使用rn的时候要怎么处理拍照权限问题呢?本文提供的是一揽子rn操作相册、拍照的解决方案,需要的朋友可以参考下
    2017-11-11
  • Android框架Volley使用:ImageRequest请求实现图片加载

    Android框架Volley使用:ImageRequest请求实现图片加载

    这篇文章主要介绍了Android框架Volley使用:ImageRequest请求实现图片加载的相关知识,非常不错,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2019-05-05
  • 基于TabLayout中的Tab间隔设置方法(实例讲解)

    基于TabLayout中的Tab间隔设置方法(实例讲解)

    下面小编就为大家分享一篇基于TabLayout中的Tab间隔设置方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • Android四大组件之Activity详细介绍

    Android四大组件之Activity详细介绍

    大家好,本篇文章主要讲的是Android四大组件之Activity详解,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • Android用ActionBar高仿微信主界面的实例代码

    Android用ActionBar高仿微信主界面的实例代码

    这篇文章主要介绍了Android用ActionBar高仿微信主界面的实例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • idea下Android各目录所代表的含义介绍

    idea下Android各目录所代表的含义介绍

    这篇文章主要给大家介绍了关于idea下Android各目录所代表含义的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • Android获取验证码倒计时实现代码

    Android获取验证码倒计时实现代码

    这篇文章主要为大家详细介绍了Android获取验证码倒计时的实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • Android Scroller及下拉刷新组件原理解析

    Android Scroller及下拉刷新组件原理解析

    这篇文章主要为大家详细解析了Android Scroller及下拉刷新组件原理,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • flutter实现底部不规则导航栏

    flutter实现底部不规则导航栏

    这篇文章主要为大家详细介绍了flutter实现底部不规则导航栏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07

最新评论