1,实现效果
-
本地缓存为了不叫listview滚动后在去网络获取数据
2,实现逻辑
【1】创建LocalCacheUtils
-
创建一个文件存储的路径
/**
* 项目图片存储的路径
*/
private static final String BASEPATH = Environment
.getExternalStorageDirectory().getAbsolutePath() + "/pic";
【2】创建方法:存入缓存文件
-
进行判断有没有该文件夹,没有进行创建
-
使用md5 加url 作为文件明
-
存入对应的文件夹中
-
压缩 参1 格式 参2 100就是不压缩 参3写入流
-
png 压缩图片比较大,我们使用JPEG 不支持透明度
bitmap.compress(CompressFormat.JPEG, 100, fos);
存入缓存文件
/**
* 存入缓存文件
*
* @param url
* @param bitmap
*/
public void setCache(String url, Bitmap bitmap) {
File baseFile = new File(BASEPATH);
if (!baseFile.exists() || !baseFile.isDirectory()) {
// 如果不存在 或者不是一个文件夹 就去创建文件夹
baseFile.mkdirs();
}
// 用url的md5值作为文件的名字
String md5 = MD5Encoder.encode(url);
// 生成图片对应的文件
File bitemapFile = new File(baseFile, md5);
try {
// 写入流
FileOutputStream fos = new FileOutputStream(bitemapFile);
// 压缩 参1 格式 参2 100就是不压缩 参3写入流
bitmap.compress(CompressFormat.JPEG, 100, fos);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
【3】本地取出图片
-
判断如果不存在就直接返回
-
取出找到对应的图片
/**
* 从本地取出图片
*
* @param url
* @return
*/
public Bitmap getCache(String url) {
Bitmap bitmap = null;
File baseFile = new File(BASEPATH);
if (!baseFile.exists() || !baseFile.isDirectory()) {
// 如果不存在 直接返回
return bitmap;
}
// 用url的md5值作为文件的名字
String md5 = MD5Encoder.encode(url);
// 生成图片对应的文件
File bitemapFile = new File(baseFile, md5);
if (bitemapFile.exists()) {
try {
// 文件转bitmap
bitmap = BitmapFactory.decodeStream(new FileInputStream(
bitemapFile));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
return bitmap;
}
3,全部代码
package com.itheima.zhbj96.utils.pic;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import com.itheima.zhbj96.utils.MD5Encoder;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.BitmapFactory;
import android.os.Environment;
public class LocalCacheUtils {
/**
* 项目图片存储的路径
*/
private static final String BASEPATH = Environment
.getExternalStorageDirectory().getAbsolutePath() + "/zhbj/pic";
/**
* 存入缓存文件
*
* @param url
* @param bitmap
*/
public void setCache(String url, Bitmap bitmap) {
File baseFile = new File(BASEPATH);
if (!baseFile.exists() || !baseFile.isDirectory()) {
// 如果不存在 或者不是一个文件夹 就去创建文件夹
baseFile.mkdirs();
}
// 用url的md5值作为文件的名字
String md5 = MD5Encoder.encode(url);
// 生成图片对应的文件
File bitemapFile = new File(baseFile, md5);
try {
// 写入流
FileOutputStream fos = new FileOutputStream(bitemapFile);
// 压缩 参1 格式 参2 100就是不压缩 参3写入流
bitmap.compress(CompressFormat.JPEG, 100, fos);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
/**
* 从本地取出图片
*
* @param url
* @return
*/
public Bitmap getCache(String url) {
Bitmap bitmap = null;
File baseFile = new File(BASEPATH);
if (!baseFile.exists() || !baseFile.isDirectory()) {
// 如果不存在 直接返回
return bitmap;
}
// 用url的md5值作为文件的名字
String md5 = MD5Encoder.encode(url);
// 生成图片对应的文件
File bitemapFile = new File(baseFile, md5);
if (bitemapFile.exists()) {
try {
// 文件转bitmap
bitmap = BitmapFactory.decodeStream(new FileInputStream(
bitemapFile));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
return bitmap;
}
}