android异步加载网络图片(1)
来源:互联网 发布:nba季后赛各项数据统计 编辑:程序博客网 时间:2024/06/07 06:02
说到异步加载,就会想到Thread,AsyncTask;
说到连接网络,可以使用HttpURLConnection,HttpClick
不多说什么,直接在代码中讲解吧。
1,先创建一个网络连接工具类HttpUtil,里面有两个方法,一个使用HttpURLConnection网络连接获取图片,另外一个使用HttpClick连接网络获取图片。
(1)使用:HttpURLConnection
public static Bitmap getHttpURLConnectionBitmap(String address) { Bitmap bitmap; InputStream inputStream = null; BufferedInputStream bufferedInputStream = null; try { URL url=new URL(address); HttpURLConnection connection= (HttpURLConnection) url.openConnection(); inputStream=connection.getInputStream(); bufferedInputStream=new BufferedInputStream(inputStream); bitmap= BitmapFactory.decodeStream(bufferedInputStream); connection.disconnect();//关闭 return bitmap; } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally { try { bufferedInputStream.close(); inputStream.close(); } catch (IOException e) { e.printStackTrace(); } }
(2)使用HttpClick:
public static Bitmap getHttpClickBitmap(String address) throws IOException { HttpClient httpClient =new DefaultHttpClient(); HttpGet httpGet=new HttpGet(address);//Get 请求 HttpResponse httpResponse = null; try { httpResponse = httpClient.execute(httpGet); if (httpResponse.getStatusLine().getStatusCode()==200) { //请求成功 HttpEntity entity = httpResponse.getEntity(); byte[] data = new byte[1024]; data = EntityUtils.toByteArray(entity); Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length); return bitmap; } } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; } }
2,上面已经把网络获取图片工具类写好了,现在就在MainActivity类中写异步加载网络图片,因为加载网络图片时更新UI是不能在主线程操作的,所以我们开辟一个线程Thread或创建一个类继承AsyncTask。
(1)在MainActivity里面写一个showImageViewbyThread(String url)方法,更新UI的是一张图片,返回类型是Bitmap。
public Handler mHandel=new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); Bitmap bitmap= (Bitmap) msg.obj; //更新UI mImageView.setImageBitmap(bitmap); } } };/**url 图片的地址*/public Bitmap showImageViewbyThread(String url){//线程 new Thread(){ @Override public void run() { super.run(); //通过网络获取图片 Bitmap bitmap=getHttpURLConnectionBitmap(url); Message message=Message.obtain(); message.obj=bitmap; //通过handle发送消息 mHandel.sendMessage(message); } }.start();}
(2)使用AsyncTack:在activity新建一个内部类继承AsyncTack,重写里面的父类的方法
/**String 图片的URL地址*Bitmap 返回一张图片*/class HttpImageAsyncTack extends AsyncTack<String,Void,Bitmap>{ /* 后台线程操作 */ @Override protected Bitmap doInBackground(String... params) { String param=params[0]; Bitmap bitmap=null; try { bitmap=HttpUtil.getHttpClickBitmap(param); return bitmap; } catch (IOException e) { e.printStackTrace(); } return bitmap; } /* 改变UI */ @Override protected void onPostExecute(Bitmap bitmap) { super.onPostExecute(bitmap); //显示图片 mImageView.setImageBitmap(bitmap); }}
3,最后就在activity的onCreate()方法里面调用
如果使用第2(1)Thread的话
showImageViewbyThread(url);
如果使用2(2)AsyncTack的话
new HttpImageAsyncTack ().execute(url);
今天暂时更时到这里。
0 0
- android异步加载网络图片(1)
- Android 图片异步加载 加载网络图片
- Android异步加载网络图片
- Android 异步加载网络图片
- Android网络图片异步加载
- Android异步加载网络图片
- Android异步加载网络图片
- Android异步加载网络图片
- Android异步加载网络图片
- android异步加载网络图片
- 【Android】异步加载网络图片
- 【Android】异步加载网络图片!!!!
- Android网络图片异步加载
- Android异步加载网络图片
- Android异步加载网络图片
- Android异步加载网络图片
- Android异步加载网络图片
- android 异步加载网络图片
- 对一个才子的走访我学到了什么?
- Aizu 0525(Osenbei 穷竭搜索)
- python 元类的使用(orm框架搭建)
- 克服当众表达的恐惧心理-《卡耐基语言的突破与相处的艺术》(美)卡耐基
- 【转载】在Windows下Memcache缓存系统构建(Java)
- android异步加载网络图片(1)
- 网络编程练习------简单双机通讯
- Launcher源码运行报错问题
- 匈牙利算法
- 采用dlopen、dlsym、dlclose加载动态链接库
- 产品经理养成计划之《缔造企鹅:产品经理是这样炼成的》读书笔记
- swift学习-AnyObject类型记录
- MediaWiki安装及Wiki网站搭建
- java——Class<?>