DiskLrucCache使用Demo(强烈推荐,很好用)
来源:互联网 发布:旅游教学软件 编辑:程序博客网 时间:2024/06/10 07:28
DiskLrucCache使用的Demo,这个demo是从网络获取一张图片,保存到本地缓存中(sdcard和内存),当下载成功后,再打开不会重新向网络请求图片,而是世界使用本地资源。
要使用DiskLrucCache需要先下载此类. 下载地址点这里
主类:
/** * DiskLrucCache使用Demo * * @author pangzf * @date 2014年8月12日 下午2:13:26 */public class DemoActivity extends Activity { private DiskLruCache mDiskLrucache; private ImageView mIvShow; private String mBitMapUrl; private String mKey; private ProgressDialog mPd; private Handler mHandler = new Handler() { @Override public void dispatchMessage(Message msg) { super.dispatchMessage(msg); // 10.下载图片之后展示 boolean isSuccess = (boolean) msg.obj; if (isSuccess) { Snapshot snapshot; try { snapshot = mDiskLrucache.get(mKey); InputStream is = snapshot.getInputStream(0); mIvShow.setImageBitmap(BitmapFactory.decodeStream(is)); } catch (IOException e) { e.printStackTrace(); } } if (mPd != null && mPd.isShowing()) { mPd.dismiss(); } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_demo); mIvShow = (ImageView) findViewById(R.id.iv_show); mPd = new ProgressDialog(DemoActivity.this); try { // 1.存放缓存的目录 File directory = DiskLrucacheUtils.getDiskCache(DemoActivity.this, "bitmap"); // 2.版本号 int appVersion = DiskLrucacheUtils.getAppVersion(DemoActivity.this); int valueCount = 1; // 3.缓存的最大值,这里设置10m long maxSize = 10 * 1024 * 1024; // 4.打开disklrucache mDiskLrucache = DiskLruCache.open(directory, appVersion, valueCount, maxSize); mBitMapUrl = "https://raw.githubusercontent.com/pangzaifei/LineChartView/master/LineChartView/effice_picture/a.jpg"; if (mDiskLrucache != null) { // 5.如果在缓存中存在就用缓存中的bitmap,如果不存在上网上下载 mKey = DiskLrucacheUtils.getKey(mBitMapUrl); Snapshot snapshot = mDiskLrucache.get(mKey); if (snapshot != null) { InputStream is = snapshot.getInputStream(0); Bitmap bitmap = BitmapFactory.decodeStream(is); if (bitmap != null) { mIvShow.setImageBitmap(bitmap); } } else { mPd.show(); new Thread() { public void run() { // 6.下载图片 mPd.setMessage("正在加载数据...."); userDiskLrucache(); }; }.start(); } } } catch (Exception e) { e.printStackTrace(); } } private void userDiskLrucache() { try { String bitMapUrl = "https://raw.githubusercontent.com/pangzaifei/LineChartView/master/LineChartView/effice_picture/a.jpg"; String key = DiskLrucacheUtils.getKey(bitMapUrl); Editor edit = mDiskLrucache.edit(key); // 7.从服务器下载图片 boolean isSuccess = DiskLrucacheUtils.downloadBitmap(bitMapUrl, edit.newOutputStream(0)); if (isSuccess) { // 8.提交到缓存 edit.commit(); // 9.下载成功去展示图片 Message msg = mHandler.obtainMessage(); msg.obj = true; mHandler.sendMessage(msg); } else { edit.abort(); } } catch (Exception e) { e.printStackTrace(); } } @Override protected void onPause() { try { if (mDiskLrucache != null) { mDiskLrucache.flush(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } super.onPause(); } @Override protected void onDestroy() { try { if (mDiskLrucache != null) { mDiskLrucache.close(); } } catch (IOException e) { e.printStackTrace(); } super.onDestroy(); }}使用DiskLrucache自己写的工具类.
package com.pangzaifei.disklrucachedemo.libcore;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.IOException;import java.io.OutputStream;import java.net.HttpURLConnection;import java.net.URL;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;import android.content.Context;import android.content.pm.PackageInfo;import android.content.pm.PackageManager.NameNotFoundException;import android.os.Environment;/** * diskLrucache的工具类 * * @author pangzf * @date 2014年8月12日 上午10:58:50 */public class DiskLrucacheUtils { /** * 获得缓存目录,当sdcard存在的时候使用,sdcard图片缓存,如果sdcard不存在使用data/data下的图片缓存 * * @param context * @param uniqueName * @return */ public static File getDiskCache(Context context, String uniqueName) { String path; if (Environment.getExternalStorageDirectory().equals( Environment.MEDIA_MOUNTED)) { // 存在sdcard path = Environment.getExternalStorageDirectory().getPath(); } else { // 不存在sdcard使用手机内存 path = context.getCacheDir().getPath(); } return new File(path + File.separator + uniqueName); } /** * 获得app版本号 * * @param context * @return * @throws NameNotFoundException */ public static int getAppVersion(Context context) throws NameNotFoundException { PackageInfo packageInfo = context.getPackageManager().getPackageInfo( context.getPackageName(), 0); return packageInfo.versionCode; } /** * 将图片url进行md5加密生成一个字符串,因为有的url地址里面存在特殊字符 * * @param urlStr * @return * @throws NoSuchAlgorithmException */ public static String getKey(String urlStr) throws NoSuchAlgorithmException { MessageDigest messageDigest = MessageDigest.getInstance("md5"); messageDigest.update(urlStr.getBytes()); return bytesToString(messageDigest.digest()); } /** * byte转string * * @param bytes */ private static String bytesToString(byte[] bytes) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < bytes.length; i++) { String hex = Integer.toHexString(0xFF & bytes[i]); if (hex.length() == 1) { sb.append(0); } sb.append(hex); } return sb.toString(); } /** * 下载图片到cache * * @param imageString * @param ops * @return */ public static boolean downloadBitmap(String imageString, OutputStream ops) { URL url; HttpURLConnection conn = null; BufferedInputStream bis = null; BufferedOutputStream bos = null; try { url = new URL(imageString); conn = (HttpURLConnection) url.openConnection(); bis = new BufferedInputStream(conn.getInputStream()); bos = new BufferedOutputStream(ops); int b; while ((b = bis.read()) != -1) { bos.write(b); } return true; } catch (IOException e) { e.printStackTrace(); } finally { try { if (conn != null) { conn.disconnect(); } if (bos != null) { bos.close(); } if (bis != null) { bis.close(); } } catch (IOException e) { e.printStackTrace(); } } return false; }}
源码下载地址
感谢guolin的博客对我的帮助。
0 0
- DiskLrucCache使用Demo(强烈推荐,很好用)
- 】关于敏捷质量很好的论调,强烈推荐
- 很好的UI Demo
- Retrofit2.0使用 很好用
- 强烈推荐使用五笔加加输入法
- 使用批处理注册Java环境变量--很好用
- 强烈推荐!
- 强烈推荐
- jquery layout demo收藏,很好的例子
- 很好的理由使用
- 很好的理由使用
- Android应用集成开发环境,强烈推荐使用
- 强烈推荐!手把手教你使用Git
- ListView的使用--一个很好用的ListView库
- jQuery MiniUI Demo (很好很强大的jquery)
- 一个很好的仿微博消息浏览功能的Demo
- 第一次使用 ubuntu感觉很好
- 很好String.format使用详解
- Redis简单教程
- [Python]日常操作
- POJ 2823 Sliding Window(单调队列)
- jQuery和灯 - 匹配天堂制造
- [转载]Java程序设计中setFont()函数的用法
- DiskLrucCache使用Demo(强烈推荐,很好用)
- tornado访问静态文件1
- DocumentBuilder 递归解析xml,适合android 以及java
- Cocos2d
- eclipse 调试远程tomcat
- Java应用程序编程
- shell脚本之从用户读取输入并进行验证
- SqlServer还原数据库时,提示无法获得对数据库的独占访问权 的错误解决方法
- Java 多态