最近新做的一个项目,里面需要下载网络上的图片,并显示在UI界面上,学Android有个常识,就是Android中在主线程中没法直接更新UI的,要想更新UI必须另外开启一个线程来实现,当开启的线程完成图片下载的任务后,来去通知主线程去更新UI,当然这就涉及到Handler这个机制,嗯,背景大致就是这样。来简单的理一下思路:

1.主线程中启动一个异步线程AsyncTask来下载图片,一般耗时操作或与网络交互的都要在异步线程中执行。

2.图片下载完成后,来去通知主线程去更新UI。

3.主线程收到消息后更新UI,完成图片的显示。

涉及到基本的知识点有:

1.HTTP访问网络的方式之一:HttpURLConnection,通过URL来创建URL对象,返回URLConnection对象,设置连接超时请求方式等一系列操作,具体可参考

http://blog.sina.com.cn/s/blog_87216a0001014sm7.html

2.AsyncTask异步任务:具体用法可参考资料http://blog.csdn.net/liuhe688/article/details/6532519

3.Handler机制:处理子线程更新UI线程控件问题,参考资料http://www.open-open.com/lib/view/open1338942421672.html

好,那么下面第一步就是在主线程中启动一个异步线程:

 @Override
protected void initEvents() {
new DownLoadImage().execute();
}

initEvents

第二步来分享我的异步任务线程下载图片并返回图片的过程,这个线程里最基本的方法就是returnBitmap()这个方法,

通过访问网络下载图片后返回图片。

接下来就是在AsyncTask的doInBackground方法中获得下载好的图片,并通知主线程来去更新UI,参考代码如下:

 public class DownLoadImage extends AsyncTask<String, Void, String> {

         @Override
protected String doInBackground(String... params) {
bitmap= returnBitmap(PictureURL);
handler.sendEmptyMessage(1);
return null;
} private Bitmap returnBitmap(String pictureURL) {
URL myFileUrl=null;
Bitmap bitmap=null;
try {
myFileUrl=new URL(pictureURL);
} catch (MalformedURLException e) {
e.printStackTrace();
}
HttpURLConnection connection;
try {
connection = (HttpURLConnection) myFileUrl.openConnection();
connection.setDoInput(true);
connection.connect();
InputStream iStream;
iStream = connection.getInputStream();
bitmap=BitmapFactory.decodeStream(iStream);
iStream.close();
} catch (IOException e) {
e.printStackTrace();
}
return bitmap;
}
}

DownLoadImage

最后一步就是主线程获得消息并更新UI,通过Handler这个机制来完成,参考代码如下:

 public Handler handler=new Handler()
{
public void handleMessage(android.os.Message msg)
{
switch (msg.what) {
case 1:
picUrl.setImageBitmap(bitmap);
break; default:
break;
}
};
};

handler

Android异步下载网络图片的更多相关文章

  1. Android异步下载图片并且缓存图片到本地

    Android异步下载图片并且缓存图片到本地 在Android开发中我们经常有这样的需求,从服务器上下载xml或者JSON类型的数据,其中包括一些图片资源,本demo模拟了这个需求,从网络上加载XML ...

  2. Android开发-下载网络图片并显示到本地

    Android下载网络图片的流程是: 发送网络请求->将图片以流的形式下载下来->将流转换为Bitmap并赋给ImageView控件. 注意点 最新的Android系统不可以在主线程上请求 ...

  3. Android异步下载

    概述 实现App常见下载公共 支持通知栏显示 支持 暂停.取消功能,使用Service.AsyncTask实现异步下载.特点简单.实用.方便源码扩展修改 详细 代码下载:http://www.demo ...

  4. Android 异步下载

    package com.example.demo1; import java.io.File; import java.io.FileOutputStream; import java.io.IOEx ...

  5. android下载网络图片并缓存

    异步下载网络图片,并提供是否缓存至内存或外部文件的功能 异步加载类AsyncImageLoader public void downloadImage(final String url, final ...

  6. android 下载网络图片并缓存

    异步下载网络图片,并提供是否缓存至内存或外部文件的功能 异步加载类AsyncImageLoader public void downloadImage(final String url, final ...

  7. Android开发学习—— 下载网络图片

    现在几乎所有的应用都在使用网络来达到浏览的目的.对于特定领域 使用xnpp协议 像即时通讯软件.但大多数还是使用HTTP协议来交互. 网络图片查看器 HTTP协议 下载网络 图片 <Relati ...

  8. Android多线程分析之五:使用AsyncTask异步下载图像

    Android多线程分析之五:使用AsyncTask异步下载图像 罗朝辉 (http://www.cnblogs.com/kesalin) CC 许可,转载请注明出处 在本系列文章的第一篇<An ...

  9. Android多线程分析之一:使用Thread异步下载图像

    Android多线程分析之一:使用Thread异步下载图像 罗朝辉 (http://www.cnblogs.com/kesalin) CC 许可,转载请注明出处   打算整理一下对 Android F ...

随机推荐

  1. cocos2d-x 用浏览器打开网页

    转自:http://www.xuebuyuan.com/1396292.html,http://www.cocoachina.com/bbs/read.php?tid=88589 First!! 源代 ...

  2. apache2 添加perl支持

    官方文档,很详细了. https://httpd.apache.org/docs/2.0/howto/cgi.html#configuring   我修改了/etc/apache2/sites-ava ...

  3. hotfix分析

    使用System Update Readiness Tool for Windows Server 2008 R2 x64 可以分析hotfix是否有安装失败的情况 示例:http://blogs.t ...

  4. Python 数据类型

    数据类型计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等各种各样的数据,不同的数据,需要定义 ...

  5. dsPIC33EP ADC模块初始化及应用实例

    //文件名 p33adc.h #ifndef _P33ADC_H_ #define _P33ADC_H_ //#include "p33adc.h" //--AD1CON1 #de ...

  6. zoj-3626 Treasure Hunt I (树形dp)

    本文出自   http://blog.csdn.net/shuangde800 题目链接: zoj-3626 题意 给一棵n个节点的树, 节点编号1~n, 每个节点有权值val[i],经过这个节点就可 ...

  7. Center OS mongodb安装

    一.下载        1.#cd /usr/local/src     2.#wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2. ...

  8. 调用百度地图Api实现的查看地图功能的小插件

    1. 功能 bMap.js 可根据地理位置调用出百度地图,采用弹出框形式 2.用法 var city = '青岛市'; var address = '香港中路'; bMap.init({ city : ...

  9. javascript代码解释执行过程

    javascript是由浏览器解释执行的脚本语言,不同于java c,需要先编译后运行,javascript 由浏览器js解释器进行解释执行,总的过程分为两大块,预编译期和执行期 下面的几个demo解 ...

  10. 学了这四招,你在Linux上观看Netflix视频不发愁

    导读 一份崭新的Linux发行版已经安装到你的电脑上,你完全准备好使用免费开源办公软件处理长时间的工作.但是你可能会问自己:"难道除了工作,就没有乐趣可言?我就是想观看Netflix视频!& ...