开启AsyncTask从网络加载图片

 1 /*AsyncTask  异步任务即做一些简单的异步处理  ;是handle与线程池的封装
 2      * 第一个泛型:参数类型泛型
 3      * 第二个泛型:更新进度泛型
 4      * 第三个泛型:onProgressUpdate的返回结果的泛型
 5      * 
 6      */
 7     
 8     class BitmapTask extends AsyncTask<Object, Void, Bitmap>{
 9 
10         private ImageView pic;
11         private String murl;
12         /**
13          * 后台耗时方法在此执行,子线程
14          */
15         @Override
16         protected Bitmap doInBackground(Object... params) {
17             pic = (ImageView) params[0];
18             murl = (String) params[1];
19             
20             pic.setTag(murl);//将图片与url绑定
21             return downloadBitmap(murl);
22         }
23         /**
24          * 更新进度,主线程
25          */
26         @Override
27         protected void onProgressUpdate(Void... values) {
28             // TODO Auto-generated method stub
29             super.onProgressUpdate(values);
30         }
31         /**
32          * 后台耗时方法结束之后,在此执行,主线程
33          */
34         @Override
35         protected void onPostExecute(Bitmap result) {
36             if(result!=null){
37                 
38                 String tag = (String) pic.getTag();
39                 if(tag.equals(murl)){
40                     pic.setImageBitmap(result);
41                 }
42                 
43             }
44             mlocalcacheutils.setBitmapTolocal(murl, result);
45             mmemorycacheutils.setBitmapTomemory(murl, result);
46         }
47     }
 1 /**
 2      * 
 3      * 下载图片
 4      * @return 
 5      */
 6     private Bitmap downloadBitmap(String url){
 7         HttpURLConnection conn=null;
 8         try {
 9             conn=(HttpURLConnection) new URL(url)
10             .openConnection();
11             
12             conn.setConnectTimeout(5000);
13             conn.setReadTimeout(5000);
14             conn.setRequestMethod("GET");
15             conn.connect();
16             
17             int responseCode = conn.getResponseCode();//响应码
18             
19             if(responseCode==200){//表示成功连接
20                 InputStream inputStream = conn.getInputStream();
21                 
22                 //图片的压缩设置
23                 BitmapFactory.Options option=new Options();
24                 option.inSampleSize=2;//表示将图片压缩原来的二分之一,需要根据图片的大小来计算出压缩值的大小
25                 option.inPreferredConfig=Bitmap.Config.RGB_565;//通过设置图片的格式即像素大小来进行图片的压缩
26                 
27                 Bitmap bitmap = BitmapFactory.decodeStream(inputStream,null,option);
28                 return bitmap;
29             }
30             
31         } catch (IOException e) {
32             
33             e.printStackTrace();
34         }
35         finally{
36             conn.disconnect();
37         }
38         return null;
39         
40     }

最后使用

1 public void getBitmapFromNet(ImageView iv_photo, String url) {
2         // TODO Auto-generated method stub
3         BitmapTask bitmaptask=new BitmapTask();
4         bitmaptask.execute(iv_photo,url);//开启AsyncTask,参数在doInBackground获取
5     }
原文地址:https://www.cnblogs.com/wangying222/p/5611917.html