开启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从网络加载图片的主要内容,如果未能解决你的问题,请参考以下文章