Android中ListView使用- 网络图片的异步加载

文章介绍了如何解决Android ListView中通过URL加载网络图片的问题。作者通过重写setViewImage方法,并采用异步任务的方式实现了图片的后台加载,提升了用户体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近自己在试着使用Android开发一个新浪微薄的手机客户端,学习Android 的应用开发,来做点笔记吧。

主要讲讲ListView的使用过程中的一些问题。

我从新浪服务器获取数据,有文本有图片,通过图片的URL来载入图片,但是在Android的SDK中ListView默认的是不能支持通过URL来载入网络图片的,需要自己重写其中的SDK的默写类中的方法。我们知道,ListView一般是配合ListActivity使用的,在使用时需要传入SimpleAdatper对象来和数据进行绑定,我通过阅读SimpleAdapter的源码发现,只要我们改写七种的方法setViewImage的实现即可以达到目的。

一开始我是这样改的:

public void setViewImage(ImageView v, String value) {   
    Bitmap bmp = BitmapFactory.decodeStream(new URL(value).openStream);   
    v.setImageBitmap(bmp);   
} 

 

但是运行的时候发现界面很容易就死掉了,无法动弹,用户体验不行。

细想,手机客户端访问网络的速度显然是不能和PC相比的,哪怕小小的图片文件可能也需要很长的一段时间,何况是一个列表有好多个待下载的图片呢,不死才怪。

于是乎想到异步下载图片,于是重写setViewImage()函数的实现:

public void setViewImage(ImageView v, String value) {   
    new ImageDownloadTask().execute(value, v);   
}   
private class ImageDownloadTask extends AsyncTask<Object, Object, Bitmap>{   
        private ImageView imageView = null;   
        @Override  
        protected Bitmap doInBackground(Object... params) {   
            // TODO Auto-generated method stub   
            Bitmap bmp = null;   
            imageView = (ImageView) params[1];   
            try {   
                bmp = BitmapFactory.decodeStream(new URL((String)params[0]).openStream());   
            } catch (MalformedURLException e) {   
                // TODO Auto-generated catch block   
                e.printStackTrace();   
            } catch (IOException e) {   
                // TODO Auto-generated catch block   
                e.printStackTrace();   
            }   
            return bmp;   
        }   
           
        protected void onPostExecute(Bitmap result){   
            imageView.setImageBitmap(result);   
        }   
    }  


本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/Garfier/archive/2010/09/24/5903868.aspx

 

这下好了,用户可以首先看到显示的文本信息,图片可以在用户浏览文字的同时多线程的下载,不会影响用户体验。

 

本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/Garfier/archive/2010/09/24/5903868.aspx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值