android异步加载网络图片(1)
2016-03-28 22:47
423 查看
说到异步加载,就会想到Thread,AsyncTask;
说到连接网络,可以使用HttpURLConnection,HttpClick
不多说什么,直接在代码中讲解吧。
1,先创建一个网络连接工具类HttpUtil,里面有两个方法,一个使用HttpURLConnection网络连接获取图片,另外一个使用HttpClick连接网络获取图片。
(1)使用:HttpURLConnection
(2)使用HttpClick:
2,上面已经把网络获取图片工具类写好了,现在就在MainActivity类中写异步加载网络图片,因为加载网络图片时更新UI是不能在主线程操作的,所以我们开辟一个线程Thread或创建一个类继承AsyncTask。
(1)在MainActivity里面写一个showImageViewbyThread(String url)方法,更新UI的是一张图片,返回类型是Bitmap。
(2)使用AsyncTack:在activity新建一个内部类继承AsyncTack,重写里面的父类的方法
3,最后就在activity的onCreate()方法里面调用
如果使用第2(1)Thread的话
如果使用2(2)AsyncTack的话
今天暂时更时到这里。
说到连接网络,可以使用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);
今天暂时更时到这里。
相关文章推荐
- 第一章 网络基础
- 神经网络一些实验
- TCP/IP三次握手详解
- Linux网络管理概述
- Infiniband的驱动安装与配置
- TCPdump抓包命令详解
- 计算机网络基础
- HTTP Headers 入门
- 南阳题目199-无线网络覆盖
- TCP面试题(二)之TCP糊涂窗口问题
- linux环境下Matlab中socket网络功能的实现
- 深度信念网络(Deep Belief Network)
- Node.js HTTP Server对象及GET、POST请求
- Android网络开启、关闭整理
- 服务器"IP地址与网络上的其他系统有冲突"问题诊断及解决
- 实现开启和关闭android移动网络(做AppWidget开发的收获)
- TCP/UDP协议常用端口号服务
- Centos的网络配置命令和文件
- 了解HTTP协议栈(实践篇)
- TCP面试题(一)之TCP的三次握手和accept()的顺序