图片三级缓存

内存

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加密

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值