android listview异步加载图片问题分析解决方案

今天讲讲listview异步加载图片,以及发生的一些问题并提供解决方案!


先写一个listview加载图片的demo,就2个类,

MainActivity.java



<span style="font-size:24px;">public class MainActivity extends Activity {
	private static final String TAG = "MainActivity";
	private List<String>  datas;
	private LayoutInflater inflater;
	private Context context;
	private MyAdapter adapter;
	private ListView listview;
	private List<String> imgUrls;
	private List<TextView> list = new ArrayList<TextView>();
	private List<String> sortUrl = new ArrayList<String>();
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		setContentView(R.layout.activity_main);
		inflater = LayoutInflater.from(this);
		context = MainActivity.this;
		listview = (ListView) findViewById(R.id.listview);
		initData();
		adapter= new MyAdapter();
		listview.setAdapter(adapter);
	}

	private void initData() {
		imgUrls = new ArrayList<String>();
		imgUrls.add("http://img5.douban.com/view/movie_poster_cover/mpst/public/p2199507156.jpg");
		imgUrls.add("http://img5.douban.com/lpic/s27397768.jpg");
		imgUrls.add("http://img3.douban.com/lpic/s27505695.jpg");
		imgUrls.add("http://img3.douban.com/lpic/s27461340.jpg");
		imgUrls.add("http://img3.douban.com/lpic/s27451442.jpg");
		imgUrls.add("http://img5.douban.com/lpic/s27453059.jpg");
		imgUrls.add("http://img3.douban.com/lpic/s27452925.jpg");
		imgUrls.add("http://img5.douban.com/lpic/s27452846.jpg");
		imgUrls.add("http://img3.douban.com/lpic/s27325332.jpg");
		imgUrls.add("http://img3.douban.com/lpic/s27325315.jpg");
		imgUrls.add("http://img5.douban.com/lpic/s27389537.jpg");
		imgUrls.add("http://img3.douban.com/view/movie_poster_cover/mpst/public/p2199638985.jpg");
		imgUrls.add("http://img3.douban.com/view/movie_poster_cover/mpst/public/p2199637691.jpg");
		imgUrls.add("http://img5.douban.com/view/movie_poster_cover/lpst/public/p2195768476.jpg");
		imgUrls.add("http://img5.douban.com/view/movie_poster_cover/lpst/public/p2180002996.jpg");
		imgUrls.add("http://img3.douban.com/view/movie_poster_cover/lpst/public/p2182978810.jpg");
		imgUrls.add("http://img5.douban.com/view/movie_poster_cover/lpst/public/p2164841498.jpg");
		imgUrls.add("http://img5.douban.com/view/movie_poster_cover/lpst/public/p2161445839.jpg");
		imgUrls.add("http://img5.douban.com/view/movie_poster_cover/lpst/public/p2183221886.jpg");
		imgUrls.add("http://img3.douban.com/view/movie_poster_cover/lpst/public/p2164383301.jpg");
		imgUrls.add("http://img3.douban.com/view/movie_poster_cover/lpst/public/p2199638985.jpg");
		imgUrls.add("http://img3.douban.com/view/movie_poster_cover/lpst/public/p2199407040.jpg");
		imgUrls.add("http://img3.douban.com/view/movie_poster_cover/lpst/public/p2176900061.jpg");
		imgUrls.add("http://img3.douban.com/view/movie_poster_cover/lpst/public/p2180405730.jpg");
		imgUrls.add("http://img3.douban.com/view/movie_poster_cover/lpst/public/p2197059721.jpg");
		imgUrls.add("http://img5.douban.com/view/movie_poster_cover/lpst/public/p2196353608.jpg");
		imgUrls.add("http://img5.douban.com/view/movie_poster_cover/lpst/public/p2187391526.jpg");
		imgUrls.add("http://img5.douban.com/view/movie_poster_cover/lpst/public/p2185073849.jpg");
		imgUrls.add("http://img5.douban.com/view/movie_poster_cover/lpst/public/p2196328516.jpg");
		imgUrls.add("http://img5.douban.com/view/movie_poster_cover/lpst/public/p2166850749.jpg");
		imgUrls.add("http://img3.douban.com/view/movie_poster_cover/lpst/public/p2183957412.jpg");
		imgUrls.add("http://img3.douban.com/spic/s27459164.jpg");
		imgUrls.add("http://img3.douban.com/spic/s27480483.jpg");
		imgUrls.add("http://img3.douban.com/spic/s27460951.jpg");
		imgUrls.add("http://img3.douban.com/spic/s27453772.jpg");
		imgUrls.add("http://img3.douban.com/spic/s27410904.jpg");
		imgUrls.add("http://img5.douban.com/spic/s27466008.jpg");
		imgUrls.add("http://img3.douban.com/spic/s3259484.jpg");
		imgUrls.add("http://img3.douban.com/spic/s3081692.jpg");
		imgUrls.add("http://img3.douban.com/spic/s1400630.jpg");
		imgUrls.add("http://img5.douban.com/spic/s4715377.jpg");
		imgUrls.add("http://img3.douban.com/spic/s6201192.jpg");
		imgUrls.add("http://img5.douban.com/spic/s2650727.jpg");
		imgUrls.add("http://img3.douban.com/spic/s3636124.jpg");
		imgUrls.add("http://img5.douban.com/spic/s3595798.jpg");
		imgUrls.add("http://img3.douban.com/spic/s27078194.jpg");
		imgUrls.add("http://img3.douban.com/view/event_poster/large/public/2a35a85a873e8e7.jpg");
		imgUrls.add("http://img3.douban.com/view/event_poster/large/public/ce66e0569742fd7.jpg");
		imgUrls.add("http://img3.douban.com/view/event_poster/large/public/4c44752e83900d9.jpg");
		imgUrls.add("http://img3.douban.com/view/event_poster/large/public/d22f7b9e5c8c92c.jpg");
	}
	class MyAdapter extends BaseAdapter{
		@Override
		public int getCount() {
			return imgUrls.size();
		}
		@Override
		public Object getItem(int position) {
			return imgUrls.get(position);
		}
		@Override
		public long getItemId(int position) {
			return position;
		}
		@Override
		public View getView(int position, View convertView, ViewGroup arg2) {
			ViewHolder viewHolder = null;
			if(convertView==null){
				viewHolder = new ViewHolder();
				convertView = inflater.inflate(R.layout.item, null);
				viewHolder.img = (ImageView) convertView.findViewById(R.id.img);
				convertView.setTag(viewHolder);
			}else{
				viewHolder = (ViewHolder) convertView.getTag();
			}
			ImgTask imgTask = new ImgTask(viewHolder.img);
			imgTask.execute(imgUrls.get(position));
			return convertView;
		}
		class ViewHolder{
			ImageView img;
		}
	}
}
</span>
<span style="font-size:24px;">
</span>
<span style="font-size:24px;">
</span>
加载图片的类:

ImgTask.java


public class ImgTask extends AsyncTask<String, Void, Bitmap> {
	private ImageView iv;
	public ImgTask(ImageView iv){
		this.iv = iv;
	}
	@Override
	protected Bitmap doInBackground(String... param) {
		String imgUrl = param[0];
		try {
			URL url = new URL(imgUrl);
			try {
				HttpURLConnection conn = (HttpURLConnection) url.openConnection();
				InputStream in = conn.getInputStream();
				Bitmap bitmap = BitmapFactory.decodeStream(in);
				if(bitmap!=null){
					return bitmap;
				}
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}

	@Override
	protected void onPostExecute(Bitmap result) {
		super.onPostExecute(result);
		if(result!=null){
			iv.setImageBitmap(result);
		}
	}

	@Override
	protected void onPreExecute() {
		super.onPreExecute();
	}
}



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值