内存
import android.graphics.Bitmap;
import android.util.LruCache;
/**
* Created by Administrator on 2016/9/6.
*/
public class MemoryCacheUtil {
private LruCache<String,Bitmap> mLruCache;
public MemoryCacheUtil(){
long maxMemory=Runtime.getRuntime().maxMemory();
mLruCache=new LruCache<String, Bitmap>((int)maxMemory){
protected int sizeOf(String key,Bitmap value){
int size=value.getRowBytes()*value.getHeight();
return size;
}
};
}
public Bitmap getBitmapFromMemory(String url){
Bitmap bitmap=mLruCache.get(url);
return bitmap;
}
public void setBitmapToMemory(String url,Bitmap bitmap){
mLruCache.put(url, bitmap);
}
}
本地
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Environment;
import android.util.Log;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import cache.utils.MD5Utils;
/**
* Created by Administrator on 2016/9/6.
*/
public class LocalCacheUtil {
private String CACHE_PATH;
public LocalCacheUtil(){
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
CACHE_PATH="/mnt/sdcard/essay"+"/essay_bitmap_cache";
}else{
CACHE_PATH="/data/data/com.aierjun.essay/files"+"/essay_bitmap_cache";
}
Log.d("JunLog","cache_path: "+CACHE_PATH);
}
public void setBitmapToLocal(String url, Bitmap bitmap){
try {
// String fileName= MD5Utils.encode(url) MD5加密
String filename="fileName";
File file=new File(CACHE_PATH,filename);
File parentFile=file.getParentFile();
if (!parentFile.exists()){
parentFile.mkdirs();
}
bitmap.compress(Bitmap.CompressFormat.JPEG,100,new FileOutputStream(file));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
public Bitmap getBitmapFromLocal(String url){
File file=new File(CACHE_PATH);
if (file.exists()){
try {
Bitmap bitmap= BitmapFactory.decodeStream(new FileInputStream(file));
return bitmap;
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
return null;
}
}
网络
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.util.Log;
import android.widget.ImageView;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
/**
* Created by Administrator on 2016/9/6.
*/
public class NetCacheUtil {
private MemoryCacheUtil mMemoryCacheUtil;
private LocalCacheUtil mlocalCacheUtil;
public NetCacheUtil(MemoryCacheUtil mMemoryCacheUtil, LocalCacheUtil mlocalCacheUtil) {
this.mMemoryCacheUtil = mMemoryCacheUtil;
this.mlocalCacheUtil = mlocalCacheUtil;
}
public void getBitmapFromInternet(ImageView ivPhoto,String url){
new BitmapAsyncTask().execute(ivPhoto,url);
}
public class BitmapAsyncTask extends AsyncTask<Object,Void,Bitmap>{
private ImageView ivPhoto;
private String url;
@Override
protected Bitmap doInBackground(Object... params) {
ivPhoto= (ImageView) params[0];
url= (String) params[1];
Bitmap bitmap=downloadBitmap(url);
return bitmap;
}
@Override
protected void onPostExecute(Bitmap bitmap) {
super.onPostExecute(bitmap);
if (bitmap!=null){
ivPhoto.setImageBitmap(bitmap);
Log.d("JunLog","从网络上获取图片。。。");
mlocalCacheUtil.setBitmapToLocal(url,bitmap);
mMemoryCacheUtil.setBitmapToMemory(url,bitmap);
}
}
}
private Bitmap downloadBitmap(String imageUrl){
HttpURLConnection conn=null;
try {
URL url=new URL(imageUrl);
conn= (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(5000);
conn.setReadTimeout(5000);
conn.setRequestMethod("GET");
conn.connect(); //开始连接
if (conn.getResponseCode()==200){
InputStream in=conn.getInputStream();
BitmapFactory.Options options=new BitmapFactory.Options();
options.inSampleSize=2; //图片的宽高为原来的一半
Bitmap bitmap= BitmapFactory.decodeStream(in,null,options);
return bitmap;
}else {
//访问失败
return null;
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
if (conn!=null){
conn.disconnect(); //断开连接
}
}
return null;
}
}
调用util
import android.graphics.Bitmap;
import android.util.Log;
import android.widget.ImageView;
import cache.LocalCacheUtil;
import cache.MemoryCacheUtil;
import cache.NetCacheUtil;
/**
* Created by Administrator on 2016/9/6.
*/
public class MyBitmapUtil {
private MemoryCacheUtil mMemoryCacheUtil;
private LocalCacheUtil mlocalCacheUtil;
private NetCacheUtil mNetCacheUtil;
public MyBitmapUtil() {
mMemoryCacheUtil=new MemoryCacheUtil();
mlocalCacheUtil=new LocalCacheUtil();
mNetCacheUtil=new NetCacheUtil(mMemoryCacheUtil,mlocalCacheUtil);
}
public void display(String url, ImageView ivPhoto){
Bitmap bitmap=null;
//内存
bitmap=mMemoryCacheUtil.getBitmapFromMemory(url);
if (bitmap!=null){
ivPhoto.setImageBitmap(bitmap);
Log.d("JunLog","内存获取图片。。。");
return;
}
bitmap=mlocalCacheUtil.getBitmapFromLocal(url);
if (bitmap!=null){
ivPhoto.setImageBitmap(bitmap);
mlocalCacheUtil.setBitmapToLocal(url,bitmap);
Log.d("JunLog","本地获取图片。。。");
return;
}
mNetCacheUtil.getBitmapFromInternet(ivPhoto,url);
}
}
这里的MD5加密直接没调用,想了解MD5的请查看下面的文章MD5加密