android中异步加载网络图片

随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)

思路:先为ListView或者GridView等设置默认图片,然后启用异步线程下载网络图片然后更新adapter,刷新UI,代码如下:

MainActivity:

package com.home.asynload;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.widget.ListView;

public class MainActivity extends Activity {
	private List<ImageBean> list = new ArrayList<ImageBean>();
	private ImageAdapter adapter;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		initImage();
		// 启动异步线程加载网络图片
		new ImageLoadTask(adapter).execute();
	}

	/**
	 * 设置初始图片
	 */
	private void initImage() {
		for (int i = 0; i < 10; i++) {
			ImageBean bean = new ImageBean();
			bean.setBitmap(BitmapFactory.decodeResource(getResources(),
					R.drawable.ic_launcher));
			list.add(bean);
		}
		adapter = new ImageAdapter(MainActivity.this, list);
		ListView listView = new ListView(MainActivity.this);
		listView.setAdapter(adapter);
		adapter.notifyDataSetChanged();
		setContentView(listView);
	}

}

ImageAdapter:

package com.home.asynload;

import java.util.ArrayList;
import java.util.List;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ProgressBar;

public class ImageAdapter extends BaseAdapter {
	private Context context;
	private List<ImageBean> list = new ArrayList<ImageBean>();

	public ImageAdapter(Context context, List<ImageBean> list) {
		this.context = context;
		this.list = list;
	}

	@Override
	public int getCount() {
		return list.size();
	}

	@Override
	public Object getItem(int position) {
		return list.get(position);
	}

	@Override
	public long getItemId(int position) {
		return position;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup arg2) {
		LinearLayout layout = new LinearLayout(context);
		ImageView imageView = new ImageView(context);
		layout.addView(imageView);
		ImageBean bean = list.get(position);
		if (bean.getBitmap() != null) {
			imageView.setImageBitmap(bean.getBitmap());
		}
		if (bean.isNeedBar()) {
			ProgressBar bar = new ProgressBar(context);
			layout.addView(bar);
		}
		return layout;
	}

}

ImageLoadTask:

package com.home.asynload;

import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;

public class ImageLoadTask extends AsyncTask<Void, Void, Void> {
	private ImageAdapter adapter;

	public ImageLoadTask(ImageAdapter adapter) {
		this.adapter = adapter;
	}

	@Override
	protected Void doInBackground(Void... params) {
		for (int i = 0; i < adapter.getCount(); i++) {
			ImageBean bean = (ImageBean) adapter.getItem(i);
			Bitmap bitmap = BitmapFactory
					.decodeStream(getStream("http://avatar.profile.csdn.net/A/E/5/2_piaopiaohu123.jpg"));
			bean.setBitmap(bitmap);
			bean.setNeedBar(false);
			publishProgress(); // 通知去更新UI
		}
		return null;
	}

	public void onProgressUpdate(Void... voids) {
		if (isCancelled()) {
			return;
		}
		// 更新UI
		adapter.notifyDataSetChanged();
	}

	public InputStream getStream(String urlStr) {
		InputStream inStream = null;
		try {
			URL url = new URL(urlStr);
			URLConnection conn = url.openConnection();
			conn.setConnectTimeout(10 * 1000);
			inStream = conn.getInputStream();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return inStream;
	}
}

ImageBean:

package com.home.asynload;

import android.graphics.Bitmap;

public class ImageBean {
	private Bitmap bitmap;
	private boolean isNeedBar = true;

	public ImageBean() {
		super();
	}

	public boolean isNeedBar() {
		return isNeedBar;
	}

	public void setNeedBar(boolean isNeedBar) {
		this.isNeedBar = isNeedBar;
	}

	public Bitmap getBitmap() {
		return bitmap;
	}

	public void setBitmap(Bitmap bitmap) {
		this.bitmap = bitmap;
	}

}





 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值