码迷,mamicode.com
首页 > 移动开发 > 详细

Android异步下载网络图片

时间:2015-09-25 12:42:36      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:

最近新做的一个项目,里面需要下载网络上的图片,并显示在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;
            }
        };
    };

Android异步下载网络图片

标签:

原文地址:http://www.cnblogs.com/wucaiyun1/p/4837685.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!