zoukankan      html  css  js  c++  java
  • 使用HttpURLConnection和AsyncTask从网络缓存图片

    1.创建NetCacheUtils中创建downloadBitmap(String url)方法

    private Bitmap downloadBitmap(String url){
            HttpURLConnection conn=null;
            try {
                conn=(HttpURLConnection) new URL(url)
                .openConnection();
                
                conn.setConnectTimeout(5000);
                conn.setReadTimeout(5000);
                conn.setRequestMethod("GET");
                conn.connect();
                
                int responseCode = conn.getResponseCode();//响应码
                
                if(responseCode==200){//表示成功连接
                    InputStream inputStream = conn.getInputStream();
                    Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
                    return bitmap;
                }
                
            } catch (IOException e) {
                
                e.printStackTrace();
            }
            finally{
                conn.disconnect();
            }
            return null;
            
        }

     2.在NetCacheUtils中调用这个方法

    public class NetCacheUtils {
    
        public void getBitmapFromNet(ImageView iv_photo, String url) {
            // TODO Auto-generated method stub
            BitmapTask bitmaptask=new BitmapTask();
            bitmaptask.execute(iv_photo,url);//开启AsyncTask,参数在doInBackground获取
        }
        /*AsyncTask  异步任务即做一些简单的异步处理  ;是handle与线程池的封装
         * 第一个泛型:参数类型泛型
         * 第二个泛型:更新进度泛型
         * 第三个泛型:onProgressUpdate的返回结果的泛型
         * 
         */
        
        class BitmapTask extends AsyncTask<Object, Void, Bitmap>{
    
            private ImageView pic;
            private String murl;
            /**
             * 后台耗时方法在此执行,子线程
             */
            @Override
            protected Bitmap doInBackground(Object... params) {
                pic = (ImageView) params[0];
                murl = (String) params[1];
                
                pic.setTag(murl);//将图片与url绑定
                return downloadBitmap(murl);
            }
            /**
             * 更新进度,主线程
             */
            @Override
            protected void onProgressUpdate(Void... values) {
                // TODO Auto-generated method stub
                super.onProgressUpdate(values);
            }
            /**
             * 后台耗时方法结束之后,在此执行,主线程
             */
            @Override
            protected void onPostExecute(Bitmap result) {
                if(result!=null){
                    
                    String tag = (String) pic.getTag();
                    if(tag.equals(murl)){
                        pic.setImageBitmap(result);
                    }
                    
                }
                System.out.println("从网络上加载图片啦");
                
            }
        }

    3.在MyBitMaputils类中调用NetCacheUtils类

    public class MyBitMaputils {
        NetCacheUtils netcache;
        public MyBitMaputils(){
            netcache=new NetCacheUtils();
        }
    
        public void display(ImageView iv_photo, String url) {
            iv_photo.setImageResource(R.drawable.news_pic_default);//默认图片,防止图片的复用
            //内存缓存
            
            //本地缓存
            
            //网络缓存(第一次)
            netcache.getBitmapFromNet(iv_photo,url);
        }
    
        
    }

    4.就可以直接使用MyBitMaputils这个工具类了

  • 相关阅读:
    MongoDB安装 & 用户创建增删改查
    MongoDB介绍
    JAVA日报
    JAVA日报
    JAVA日报
    JAVA日报
    JAVA日报
    JAVA日报
    JAVA日报
    JAVA日报
  • 原文地址:https://www.cnblogs.com/wangying222/p/5269378.html
Copyright © 2011-2022 走看看