Android 图片本地缓存

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;

    }

}



猜你喜欢

转载自blog.csdn.net/Cricket_7/article/details/88865001