• 从本地缓存图片


    从本地缓存图片

    LocalCacheUtils

     1 /**
     2  * 
     3  * 从本地读图片
     4  * @param url
     5  */
     6     public Bitmap getBitmapFromlocal(String url){
     7         try {
     8             String filename = MD5Encoder.encode(url);
     9             
    10             File file=new File(CACHE_PATH, filename);//通过父文件夹与自己的文件名称来创建一个文件
    11             
    12             if(file.exists()){
    13                 Bitmap bitmap = BitmapFactory.decodeStream(new FileInputStream(file));
    14                 return bitmap;
    15             }
    16             
    17         } catch (Exception e) {
    18             // TODO Auto-generated catch block
    19             e.printStackTrace();
    20         }
    21         return null;
    22         
    23     }
    24     
    25 /**
    26  * 
    27  * 将图片写到本地
    28  * @param url
    29  * @param bitmap
    30  */
    31     public void setBitmapTolocal(String url,Bitmap bitmap){
    32         try {
    33             String filename = MD5Encoder.encode(url);
    34             File file=new File(filename);
    35             File parentFile = file.getParentFile();
    36             if(!parentFile.exists()){//如果文件夾不存在,則创建
    37                 file.mkdirs();
    38             }
    39             //将图片保存到本地
    40             bitmap.compress(CompressFormat.JPEG, 100, 
    41                     new FileOutputStream(file));
    42                 
    43     
    44         } catch (Exception e) {
    45             // TODO Auto-generated catch block
    46             e.printStackTrace();
    47         }
    48         
    49     }
    50     
    51 }

    2.在NetCacheUtils (第一次必须从网络中缓存图片)中调用setBitmapTolocal(String url,Bitmap bitmap)方法获取

    /**
     *
     * 从网络下载图片
     * @author admin
     *
     */
    1
    public class NetCacheUtils { 2 private LocalCacheUtils mlocalcacheutils; 3 4 5 public NetCacheUtils(LocalCacheUtils localcacheutils, MemoryCacheUtils memorycacheutils) { 6 mlocalcacheutils=localcacheutils; 7 8 } 9 10 public void getBitmapFromNet(ImageView iv_photo, String url) { 11 // TODO Auto-generated method stub 12 BitmapTask bitmaptask=new BitmapTask(); 13 bitmaptask.execute(iv_photo,url);//开启AsyncTask,参数在doInBackground获取 14 } 15 /*AsyncTask 异步任务即做一些简单的异步处理 ;是handle与线程池的封装 16 * 第一个泛型:参数类型泛型 17 * 第二个泛型:更新进度泛型 18 * 第三个泛型:onProgressUpdate的返回结果的泛型 19 * 20 */ 21 22 class BitmapTask extends AsyncTask<Object, Void, Bitmap>{ 23 24 private ImageView pic; 25 private String murl; 26 /** 27 * 后台耗时方法在此执行,子线程 28 */ 29 @Override 30 protected Bitmap doInBackground(Object... params) { 31 pic = (ImageView) params[0]; 32 murl = (String) params[1]; 33 34 pic.setTag(murl);//将图片与url绑定 35 return downloadBitmap(murl); 36 } 37 /** 38 * 更新进度,主线程 39 */ 40 @Override 41 protected void onProgressUpdate(Void... values) { 42 // TODO Auto-generated method stub 43 super.onProgressUpdate(values); 44 } 45 /** 46 * 后台耗时方法结束之后,在此执行,主线程 47 */ 48 @Override 49 protected void onPostExecute(Bitmap result) { 50 if(result!=null){ 51 52 String tag = (String) pic.getTag(); 53 if(tag.equals(murl)){ 54 pic.setImageBitmap(result); 55 } 56 57 } 58 mlocalcacheutils.setBitmapTolocal(murl, result);60 System.out.println("从网络上加载图片啦"); 61 62 } 63 } 64 65 /** 66 * 67 * 下载图片 68 * @return 69 */ 70 private Bitmap downloadBitmap(String url){ 71 HttpURLConnection conn=null; 72 try { 73 conn=(HttpURLConnection) new URL(url) 74 .openConnection(); 75 76 conn.setConnectTimeout(5000); 77 conn.setReadTimeout(5000); 78 conn.setRequestMethod("GET"); 79 conn.connect(); 80 81 int responseCode = conn.getResponseCode();//响应码 82 83 if(responseCode==200){//表示成功连接 84 InputStream inputStream = conn.getInputStream(); 85 Bitmap bitmap = BitmapFactory.decodeStream(inputStream); 86 return bitmap; 87 } 88 89 } catch (IOException e) { 90 91 e.printStackTrace(); 92 } 93 finally{ 94 conn.disconnect(); 95 } 96 return null; 97 98 } 99 }

    3.在MyBitMaputils中调用getBitmapFromlocal(url)

     1 public class MyBitMaputils {
     2     NetCacheUtils netcache;
     3     LocalCacheUtils localcacheutils;
     4     public MyBitMaputils(){
     5         localcacheutils=new LocalCacheUtils();
     6         netcache=new NetCacheUtils(localcacheutils);
     7         
     8     }
     9 
    10     public void display(ImageView iv_photo, String url) {
    11         iv_photo.setImageResource(R.drawable.news_pic_default);//默认图片,防止图片的复用
    12         //内存缓存
    13         
    14         //本地缓存
    15         Bitmap bitmap = localcacheutils.getBitmapFromlocal(url);
    16         if(bitmap!=null){
    17             iv_photo.setImageBitmap(bitmap);
    18             System.out.println("从本地读取图片");
    19             return;//从本地读取就不需要从网络读取了
    20         }
    21         
    22         //网络缓存(第一次)
    23         netcache.getBitmapFromNet(iv_photo,url);
    24     }
  • 相关阅读:
    新版本支付宝开发流程
    产生随机字串,可用来自动生成密码
    phpcmsv9的分页使用到的函数,直接拿来用就可以了
    js的一些函数
    JS一个简单的计时器
    linux 整理下常用命令
    mysql.sock
    第三方登录之QQ登录(二)——OAuth2.0处理流程介绍(以QQ登录为例)
    第三方登录之QQ登录(一)——QQ互联开放平台新建应用
    networkx AttributeError: 'DiGraph' object has no attribute 'edge'
  • 原文地址:https://www.cnblogs.com/wangying222/p/5269854.html
Copyright © 2020-2023  润新知