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

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

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

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


public class DownLoadImage extends AsyncTask<String, Integer, 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;
        }
    }

最后一步就是主线程获得消息并更新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;
            }
        };
    };

时间: 2024-12-29 05:09:14

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

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

在Android开发中我们经常有这样的需求,从服务器上下载xml或者JSON类型的数据,其中包括一些图片资源,本demo模拟了这个需求,从网络上加载XML资源,其中包括图片,我们要做的解析XML里面的数据,并且把图片缓存到本地一个cache目录里面,并且用一个自定义的Adapter去填充到LIstView,demo运行效果见下图: 通过这个demo,要学会有一下几点 1.怎么解析一个XML 2.demo中用到的缓存图片到本地一个临时目录的思想是怎样的? 3.AsyncTask类的使用,因为要去异

Android 异步下载

package com.example.demo1; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import com.tiffdecoder.TiffDecoder; import android.app.Ac

Android实战简易教程-第七十一枪(异步网络下载网络图片及图片廊制作)

首先来实现异步下载网络图片,布局文件如下: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_pare

android下载网络图片并缓存

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

异步下载照片墙

android异步下载照片墙 版权声明:本文出自ShengFQ的博客. 转载请注明出处:http://www.jianshu.com/p/1709ea24ebbb 我的问题 我要实现从服务器端下载一个图片地址列表,并异步下载图片展示在imageview,实现缓存和压缩.如果要下载压缩后的图片,应该是由服务器端先压缩后存储,这里只说客户端范围,不做讨论. 需要预备的知识点: 1.AsyncTask异步调用方法下载json数据 2.listview,viewadapter的高性能写法 3.Handl

android开发步步为营之67:使用android开源项目android-async-http异步下载文件

android-async-http项目地址 https://github.com/loopj/android-async-http,android-async-http顾名思义是异步的http请求,不过它也支持同步请求的,本文主要使用了android-async-http做异步请求下载文件.每当app需要更新新版本的时候,就需要用到下载功能的,经研究android-async-http这个第三方开源项目还是挺好用的,这里介绍给大家.     1.下载类DownloadManager.java

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

罗朝辉 (http://blog.csdn.net/kesalin) CC 许可,转载请注明出处 打算整理一下对 Android Framework 中多线程相关知识的理解,主要集中在 Framework 层的 Thread, Handler, Looper, MessageQueue, Message, AysncTask,当然不可避免地要涉及到 native 方法,因此也会分析 dalvik 中和线程以及消息处理相关的代码:如 dalvik 中的 C++ Thread 类以及 Message

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

Android多线程分析之五:使用AsyncTask异步下载图像 罗朝辉 (http://blog.csdn.net/kesalin) CC 许可,转载请注明出处 在本系列文章的第一篇<Android多线程分析之中的一个:使用Thread异步下载图像>中.曾演示了怎样使用 Thread 来完毕异步任务. Android 为了简化在 UI 线程中完毕异步任务(毕竟 UI 线程是 app 最重要的线程).实现了一个名为 AysncTask 的模板类.使用 AysncTask 能够在异步任务进行的同

Android 异步从网络上下载图片

package com.example.android_asynctask; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClie