从本地缓存图片

从本地缓存图片

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     }

 

posted on 2016-03-12 19:51  oooo呼呼  阅读(423)  评论(0编辑  收藏  举报