开启AsyncTask从网络加载图片

Posted oooohuhu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了开启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     }

 

以上是关于开启AsyncTask从网络加载图片的主要内容,如果未能解决你的问题,请参考以下文章

如何从选项卡片段中的 AsyncTask Resftful WS 加载批量数据

如何在切换片段时停止 AsyncTask?

Asynctask结果显示重新创建片段后

在 AsyncTask 完成之前不会绘制 UI

android 开发之AsyncTask

AsyncTask.cancel()的结束问题