Android中如何加载数据缓存

最近app快完工了,但是很多列表加载,新闻咨询等数据一直从网络请求,速度很慢,影响用户体验,所以寻思用缓存来加载一些更新要求不太高的数据

首先做一个保存缓存的工具类

import java.io.File; import java.io.IOException; import android.content.Context; import android.os.Environment; import android.util.Log; /** * 缓存工具类 */ public class ConfigCacheUtil { private static final String TAG=ConfigCacheUtil.class.getName(); /** 1秒超时时间 */ public static final int CONFIG_CACHE_SHORT_TIMEOUT=1000 * 60 * 5; // 5 分钟 /** 5分钟超时时间 */ public static final int CONFIG_CACHE_MEDIUM_TIMEOUT=1000 * 3600 * 2; // 2小时 /** 中长缓存时间 */ public static final int CONFIG_CACHE_ML_TIMEOUT=1000 * 60 * 60 * 24 * 1; // 1天 /** 最大缓存时间 */ public static final int CONFIG_CACHE_MAX_TIMEOUT=1000 * 60 * 60 * 24 * 7; // 7天 /** * CONFIG_CACHE_MODEL_LONG : 长时间(7天)缓存模式 <br> * CONFIG_CACHE_MODEL_ML : 中长时间(12小时)缓存模式<br> * CONFIG_CACHE_MODEL_MEDIUM: 中等时间(2小时)缓存模式 <br> * CONFIG_CACHE_MODEL_SHORT : 短时间(5分钟)缓存模式 */ public enum ConfigCacheModel { CONFIG_CACHE_MODEL_SHORT, CONFIG_CACHE_MODEL_MEDIUM, CONFIG_CACHE_MODEL_ML, CONFIG_CACHE_MODEL_LONG; } /** * 获取缓存 * @param url 访问网络的URL * @return 缓存数据 */ public static String getUrlCache(String url, ConfigCacheModel model,Context context) { if(url == null) { return null; } String result=null; String path=Constant.ENVIROMENT_DIR_CACHE + MD5Utils.md5Encrypt(url)+".txt"; File file=new File(path); if(file.exists() && file.isFile()) { long expiredTime=System.currentTimeMillis() - file.lastModified(); Log.d(TAG, file.getAbsolutePath() + " expiredTime:" + expiredTime / 60000 + "min"); // 1。如果系统时间是不正确的 // 2。当网络是无效的,你只能读缓存 if(UIUtils.isNetWorkConnected(context)) { if(expiredTime < 0) { return null; } if(model == ConfigCacheModel.CONFIG_CACHE_MODEL_SHORT) { if(expiredTime > CONFIG_CACHE_SHORT_TIMEOUT) { return null; } } else if(model == ConfigCacheModel.CONFIG_CACHE_MODEL_MEDIUM) { if(expiredTime > CONFIG_CACHE_MEDIUM_TIMEOUT) { return null; } } else if(model == ConfigCacheModel.CONFIG_CACHE_MODEL_ML) { if(expiredTime > CONFIG_CACHE_ML_TIMEOUT) { return null; } } else if(model == ConfigCacheModel.CONFIG_CACHE_MODEL_LONG) { if(expiredTime > CONFIG_CACHE_MEDIUM_TIMEOUT) { return null; } } else { if(expiredTime > CONFIG_CACHE_MAX_TIMEOUT) { return null; } } } try { result=FileUtils.readTextFile(file); } catch(IOException e) { e.printStackTrace(); } } return result; } /** * 设置缓存 * @param data * @param url */ public static void setUrlCache(String data, String url) { if(Constant.ENVIROMENT_DIR_CACHE == null) { return; } File dir=new File(Constant.ENVIROMENT_DIR_CACHE); if(!dir.exists() && Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) { dir.mkdirs(); } File file=new File(Constant.ENVIROMENT_DIR_CACHE + MD5Utils.md5Encrypt(url)+".txt"); try { // 创建缓存数据到磁盘,就是创建文件 FileUtils.writeTextFile(file, data); } catch(IOException e) { Log.d(TAG, "write " + file.getAbsolutePath() + " data failed!"); e.printStackTrace(); } catch(Exception e) { e.printStackTrace(); } } /** * 删除历史缓存文件 * @param cacheFile */ public static void clearCache(File cacheFile) { if(cacheFile == null) { if(Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) { try { File cacheDir=new File(Environment.getExternalStorageDirectory().getPath() + "/gdxz/cache/"); if(cacheDir.exists()) { clearCache(cacheDir); } } catch(Exception e) { e.printStackTrace(); } } } else if(cacheFile.isFile()) { cacheFile.delete(); } else if(cacheFile.isDirectory()) { File[] childFiles=cacheFile.listFiles(); for(int i=0; i < childFiles.length; i++) { clearCache(childFiles[i]); } } } }

已经写好的一个工具,只需在需要做缓存的地方调用ConfigCacheUtil.getUrlCache方法传入相应的url,类型和上下文 判断结果是否为空,如果为空说明不存在缓存请求网络加载数据。如果不为空说明缓存中有数据直接读缓存,得到result再处理json数据就ok了

以上内容是针对Android中如何加载数据缓存的方法,希望对大家有所帮助。

时间: 2024-09-14 19:41:53

Android中如何加载数据缓存的相关文章

Android中如何加载数据缓存_Android

最近app快完工了,但是很多列表加载,新闻咨询等数据一直从网络请求,速度很慢,影响用户体验,所以寻思用缓存来加载一些更新要求不太高的数据 首先做一个保存缓存的工具类 import java.io.File; import java.io.IOException; import android.content.Context; import android.os.Environment; import android.util.Log; /** * 缓存工具类 */ public class Co

Android实现滑动加载数据的方法_Android

本文实例讲述了Android实现滑动加载数据的方法.分享给大家供大家参考.具体实现方法如下: EndLessActivity.java如下: package com.ScrollListView; import Android.app.ListActivity; import Android.os.Bundle; import Android.view.Gravity; import Android.view.View; import Android.view.ViewGroup; import

Android实现滑动加载数据的方法

本文实例讲述了Android实现滑动加载数据的方法.分享给大家供大家参考.具体实现方法如下: EndLessActivity.java如下: package com.ScrollListView; import Android.app.ListActivity; import Android.os.Bundle; import Android.view.Gravity; import Android.view.View; import Android.view.ViewGroup; import

android 柱状图-Android 柱状图 滑动加载数据

问题描述 Android 柱状图 滑动加载数据 Android 使用GraphicalView画出的柱状图如何在滑动时加载更多数据,因为数据比较多,希望能够在有需求时滑动再加载更多数据 解决方案 http://download.csdn.net/download/miss_ceng/7550981

Android中Glide加载库的图片缓存配置究极指南_Android

零.选择Glide为什么图片加载我首先推荐Glide? 图片加载框架用了不少,从afinal框架的afinalBitmap,Xutils的BitmapUtils,老牌框架universalImageLoader,著名开源组织square的picasso,google推荐的glide到FaceBook推出的fresco.这些我前前后后都体验过,那么面对这么多的框架,该如何选择呢?下面简单分析下我的看法. afinal和Xuils在github上作者已经停止维护了,开源社区最新的框架要属KJFram

Android中Glide加载库的图片缓存配置究极指南

零.选择Glide 为什么图片加载我首先推荐Glide? 图片加载框架用了不少,从afinal框架的afinalBitmap,Xutils的BitmapUtils,老牌框架universalImageLoader,著名开源组织square的picasso,google推荐的glide到FaceBook推出的fresco.这些我前前后后都体验过,那么面对这么多的框架,该如何选择呢?下面简单分析下我的看法. afinal和Xuils在github上作者已经停止维护了,开源社区最新的框架要属KJFra

Android仿美团加载数据、小人奔跑进度动画对话框(附顺丰快递员奔跑效果)

我们都知道在Android中,常见的动画模式有两种:一种是帧动画(Frame Animation),一种是补间动画(Tween Animation).帧动画是提供了一种逐帧播放图片的动画方式,播放事先做好的图像,与gif图片原理类似,就像是在放电影一样.补间动画可以实现View组件的移动.放大.缩小以及渐变等效果.      今天我们主要来模仿一下美团中加载数据时小人奔跑动画的对话框效果,取个有趣的名字就是Running Man,奔跑吧,兄弟!话不多少,先上效果图,让各位大侠看看是不是你想要实现

编写Smarty插件在模板中直接加载数据的详细介绍

之前使用smarty的时候,通常是在php程序端读取数据(一般从数据库),然后assign给模板的变量,才可以在前端使用这个变量.这样不是不好,只是数据多的时候php端的代码维护起来有点麻烦,特别是当存在很多模板块化得数据时. 所以写了个插件,结合之前的crud类实现在前端模板可以加载一些模块化得数据. 复制代码 代码如下: <?php /** * Smarty plugin * @package Smarty * @subpackage plugins */ /** * Smarty {loa

编写Smarty插件在模板中直接加载数据的详细介绍_php技巧

之前使用smarty的时候,通常是在php程序端读取数据(一般从数据库),然后assign给模板的变量,才可以在前端使用这个变量.这样不是不好,只是数据多的时候php端的代码维护起来有点麻烦,特别是当存在很多模板块化得数据时. 所以写了个插件,结合之前的crud类实现在前端模板可以加载一些模块化得数据. 复制代码 代码如下: <?php/** * Smarty plugin * @package Smarty * @subpackage plugins *//** * Smarty {load_