本篇文章转载,原文地址:
http://m.blog.csdn.net/blog/chenfuduo_loveit/42676505
Volley框架适用于与服务器交互频繁,但数据量不大。这篇文章主要是在Listview中大量的图片从网络获取。
运行效果图:
代码如下:
目录结构:
1、Activity中的代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView) findViewById(R.id.listview);
MyAdapter adapter = new MyAdapter(this, images);
listView.setAdapter(adapter);
}
2、适配器中的代码如下:
public class MyAdapter extends BaseAdapter {
private String[] list;
private Context context;
// 初始化请求队列;
private RequestQueue queue;
// 初始化imageloader;
private ImageLoader imageLoader;
public MyAdapter(Context context, String[] list) {
this.context = context;
this.list = list;
queue = Volley.newRequestQueue(context);
// imageloader传两个参数,一个请求队列,一个bitmap缓存;
imageLoader = new ImageLoader(queue, new BitmapCache());
}
@Override
public int getCount() {
return list.length;
}
@Override
public Object getItem(int position) {
return list[position];
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
holder = new ViewHolder();
convertView = LayoutInflater.from(context).inflate(
R.layout.list_item, null);
holder.img = (NetworkImageView) convertView
.findViewById(R.id.userimage);
holder.tv = (TextView) convertView.findViewById(R.id.textview);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
String imgUrl = list[position];
if (imgUrl != null && !imgUrl.equals("")) {
//设置默认的图片,就是在没有加载到item时,显示的图片;
holder.img.setDefaultImageResId(R.drawable.ic_launcher);
//设置加载失败显示的图片;
holder.img.setErrorImageResId(R.drawable.ic_launcher);
//设置加载的图片;
holder.img.setImageUrl(imgUrl, imageLoader);
holder.tv.setText("item" + (position));
}
return convertView;
}
static class ViewHolder {
//用的是Volley包中的networimageview控件,当然也可以用imageview;
NetworkImageView img;
TextView tv;
}
3、BitmapCache缓存代码如下:
public class BitmapCache implements ImageCache {
private static final String TAG = "BitmapCache";
private LruCache<String, Bitmap> mCache;
public BitmapCache() {
//设置缓存为10M;
int maxSize = 10* 1024 * 1024;
mCache = new LruCache<String, Bitmap>(maxSize) {
@Override
protected int sizeOf(String key, Bitmap bitmap) {
return bitmap.getRowBytes() * bitmap.getHeight();
}
};
}
@Override
public Bitmap getBitmap(String url) {
Log.i(TAG, "get cache " + url);
return mCache.get(url);
}
@Override
public void putBitmap(String url, Bitmap bitmap) {
Log.i(TAG, "get cache: " + url);
if (bitmap != null) {
mCache.put(url, bitmap);
}
}
Demo下载地址eclipse版:
http://download.csdn.net/detail/androidxiaogang/9198161