如何为Android缓存数据到本地
来源:互联网 发布:淘宝哪家店铺级别最高 编辑:程序博客网 时间:2024/05/16 09:54
如何为Android缓存数据到本地
对于一个应用来说,有许多的数据是不需要实时访问网络的,或者在用户第二次打开应用的时候 ,访问网络可能不是特别的快 ,但是此时的应用是没有数据展示的,这时候就会涉及到 数据的缓存,数据的缓存 可以提高用户的体验 也可以 为用户节省不必要的流量。
缓存思路:
1: 如果你的数据更新的频率比较高,这时候要是缓存数据的话 ,那么 这时候的缓存数据 是有过期时间的,当然 还得看你怎么做缓存,如果 你是仅仅只是先访问网络之后 在替换缓存数据的话 ,这时候缓存就不会有什么过期的时间,这时候的缓存只是为了 在没有网络的情况下 ,用户也可以看到上一次的数据。
2: 如果你的数据 更新的频率不是很高的话 ,这时候 你也可以设置缓存的过期时间,也可以不用设置,比如说 访问网络后直接替换掉上一次的缓存数据。
3: 需要缓存的数据 有基本的数据 还有图片或者视频,今天只说 基本数据的缓存。
缓存的方式
1:数据库
:数据库一般缓存的是关系型比较强的数据,比如联系人等数据
2:文件
:文件一般可以缓存任何你想缓存的数据
3:xml/sp(SharedPreferences)
:这种方式主要缓存一些应用的配置信息
我要讲的缓存方式
我在做缓存时一般采用的是 用文件做缓存
图片展示:
有网的情况下:
无网的情况下:
那么缓存到底应该怎么做呢? 下面 我就讲一下我以前做缓存的案例
缓存到底要缓存些什么呢?其实缓存要么缓存的是你从服务器拿到的json数据,要么缓存的是你解析json后得到的集合或者对象,也就是说,等你访问网络成功后,解析完json数据后,把你得到的集合或者对象用文件的形式存到本地。
比如:你从服务器拿到json数据后解析完之后得到的集合是 ArrayList<SubjectInfo>
mData = new ArrayList<>() ,SubjectInfo是一个对象,那么这时候 你要做的就是把 mData集合用文件的形式存到本地去, 怎么存呢?看代码
代码
/** * Created by FussenYu on 2016/4/20. */ public class CacheData { public static final int recent_subject_list = 8; /** * 获取文件名 * @param uid 用户的id * @param studentId 文件唯一标示 * @param type :数据类型 * @return */ public static String getFileNameById(int type, String uid, String studentId) { File file = new File(Config.CACHE_DATA_PATH); if (!file.exists()) file.mkdirs(); String fileName = "cachedata_" + uid + "_" + type + "_" + studentId + ".dat"; return fileName; } /** * 存储缓存文件: */ public static void saveRecentSubList(String uid, String studentId, List<SubjectInfo> list) { int type = recent_subject_list; String fileName = Config.CACHE_DATA_PATH + File.separator + getFileNameById(type, uid, studentId); File file = new File(fileName); try { if (!file.exists()) file.createNewFile(); ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(fileName)); oos.writeObject(list); oos.flush(); oos.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * 读取缓存文件: */ public static List<SubjectInfo> getRecentSubList(String uid, String studentId) { int type = recent_subject_list; List<SubjectInfo> resultList = new ArrayList<>(); String fileName = Config.CACHE_DATA_PATH + File.separator + getFileNameById(type, uid, studentId); try { ObjectInputStream ois = new ObjectInputStream(new FileInputStream(fileName)); ArrayList<SubjectInfo> list_ext = (ArrayList<SubjectInfo>) ois.readObject(); for (SubjectInfo obj : list_ext) { SubjectInfo bean = obj; if (bean != null) { resultList.add(bean); } } ois.close(); } catch (Exception e) { return resultList; } return resultList; } }
这时候你只需要调用 CacheData.saveRecentSubList(PrefHelperUtils.getInstance().getUserUid(), studentId, mData);就可以将mData用文件的形式写到本地; 你要想从本地拿取数据的话,只需要调用 List<SubjectInfo>
allSubList = CacheData.getRecentSubList(PrefHelperUtils.getInstance().getUserUid(), studentId); 方法就可拿到保存到本地的集合;
说明:PrefHelperUtils.getInstance().getUserUid()是用户的id,我是用sp保存到本地的;
需要注意的问题:
如果有对象的话 那么这个对象必须实现Serializable接口,不然 不能成功!
- 如何为Android缓存数据到本地
- android缓存数据到本地
- android:缓存服务器数据到本地
- android缓存数据到本地放在哪儿
- android缓存数据到本地放在哪儿最好?
- android缓存数据到本地放在哪儿最好?
- android缓存数据到本地放在哪儿最好?
- android缓存数据到本地放在哪儿最好?
- android缓存数据到本地放在哪儿最好?
- android缓存数据到本地放在哪儿最好?
- android缓存数据到本地放在哪儿最好?
- android缓存数据到本地放在哪儿最好?
- android缓存数据到本地放在哪儿最好?
- android缓存数据到本地放在哪儿最好?
- Android清除本地数据缓存
- 【Android】Android清除本地数据缓存代码
- 【Android】Android清除本地数据缓存代码
- 【Android】Android清除本地数据缓存代码
- No qualifying bean of type [] found for deperidency :
- 【ZOJ3944 The 13th Zhejiang Provincial Collegiate Programming ContestI】【简单模拟】People Counting 照片人数统计 人
- Rotatedrawable详解
- 【ZOJ3946 The 13th Zhejiang Provincial Collegiate Programming ContestK】【最短路+贪心 or 最小树形图】Highway Proje
- sql 语句中char varchar 以及nvchar 区别是什么?
- 如何为Android缓存数据到本地
- mybatis中$和#区别
- 【ZOJ3947 The 13th Zhejiang Provincial Collegiate Programming ContestL】【水题】Very Happy Great BG 简单求和
- B树
- 机器学习——BP神经网络模型
- Oracle12c学习(三)---虚拟机win2008r2系统下Oracle Rac安装配置
- filter
- nyoj 56/70(阶乘的因式分解)
- javascript浏览器参数的操作,js获取浏览器参数