Android异步下载网络图片
最近新做的一个项目,里面需要下载网络上的图片,并显示在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异步下载网络图片的更多相关文章
- Android异步下载图片并且缓存图片到本地
Android异步下载图片并且缓存图片到本地 在Android开发中我们经常有这样的需求,从服务器上下载xml或者JSON类型的数据,其中包括一些图片资源,本demo模拟了这个需求,从网络上加载XML ...
- Android开发-下载网络图片并显示到本地
Android下载网络图片的流程是: 发送网络请求->将图片以流的形式下载下来->将流转换为Bitmap并赋给ImageView控件. 注意点 最新的Android系统不可以在主线程上请求 ...
- Android异步下载
概述 实现App常见下载公共 支持通知栏显示 支持 暂停.取消功能,使用Service.AsyncTask实现异步下载.特点简单.实用.方便源码扩展修改 详细 代码下载:http://www.demo ...
- Android 异步下载
package com.example.demo1; import java.io.File; import java.io.FileOutputStream; import java.io.IOEx ...
- android下载网络图片并缓存
异步下载网络图片,并提供是否缓存至内存或外部文件的功能 异步加载类AsyncImageLoader public void downloadImage(final String url, final ...
- android 下载网络图片并缓存
异步下载网络图片,并提供是否缓存至内存或外部文件的功能 异步加载类AsyncImageLoader public void downloadImage(final String url, final ...
- Android开发学习—— 下载网络图片
现在几乎所有的应用都在使用网络来达到浏览的目的.对于特定领域 使用xnpp协议 像即时通讯软件.但大多数还是使用HTTP协议来交互. 网络图片查看器 HTTP协议 下载网络 图片 <Relati ...
- Android多线程分析之五:使用AsyncTask异步下载图像
Android多线程分析之五:使用AsyncTask异步下载图像 罗朝辉 (http://www.cnblogs.com/kesalin) CC 许可,转载请注明出处 在本系列文章的第一篇<An ...
- Android多线程分析之一:使用Thread异步下载图像
Android多线程分析之一:使用Thread异步下载图像 罗朝辉 (http://www.cnblogs.com/kesalin) CC 许可,转载请注明出处 打算整理一下对 Android F ...
随机推荐
- cocos2d-x 用浏览器打开网页
转自:http://www.xuebuyuan.com/1396292.html,http://www.cocoachina.com/bbs/read.php?tid=88589 First!! 源代 ...
- apache2 添加perl支持
官方文档,很详细了. https://httpd.apache.org/docs/2.0/howto/cgi.html#configuring 我修改了/etc/apache2/sites-ava ...
- hotfix分析
使用System Update Readiness Tool for Windows Server 2008 R2 x64 可以分析hotfix是否有安装失败的情况 示例:http://blogs.t ...
- Python 数据类型
数据类型计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等各种各样的数据,不同的数据,需要定义 ...
- dsPIC33EP ADC模块初始化及应用实例
//文件名 p33adc.h #ifndef _P33ADC_H_ #define _P33ADC_H_ //#include "p33adc.h" //--AD1CON1 #de ...
- zoj-3626 Treasure Hunt I (树形dp)
本文出自 http://blog.csdn.net/shuangde800 题目链接: zoj-3626 题意 给一棵n个节点的树, 节点编号1~n, 每个节点有权值val[i],经过这个节点就可 ...
- Center OS mongodb安装
一.下载 1.#cd /usr/local/src 2.#wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2. ...
- 调用百度地图Api实现的查看地图功能的小插件
1. 功能 bMap.js 可根据地理位置调用出百度地图,采用弹出框形式 2.用法 var city = '青岛市'; var address = '香港中路'; bMap.init({ city : ...
- javascript代码解释执行过程
javascript是由浏览器解释执行的脚本语言,不同于java c,需要先编译后运行,javascript 由浏览器js解释器进行解释执行,总的过程分为两大块,预编译期和执行期 下面的几个demo解 ...
- 学了这四招,你在Linux上观看Netflix视频不发愁
导读 一份崭新的Linux发行版已经安装到你的电脑上,你完全准备好使用免费开源办公软件处理长时间的工作.但是你可能会问自己:"难道除了工作,就没有乐趣可言?我就是想观看Netflix视频!& ...