Volley是Google在2003年的I/O大会上推出的通信框架。适用于数据量小、频率高的请求。不适合大数据加载
RequestQueue queue = Volley.newRequestQueue(context);
StringRequest request = new StringRequest("https://www.baidu.com/?tn=62095104_5_oem_dg", new Response.Listener() {
@Override
public void onResponse(String s) {
textView.setText(s);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
Toast.makeText(VolleyActivity.this,volleyError.getMessage(),Toast.LENGTH_SHORT).show();
}
});
3、将request对象添加到RequestQueue中。
queue.add(request);
注:volley不适合大的文件流操作,例如上传和下载。因为Volley会把所有的服务器端返回的数据在解析期间缓存进内存。
用法和StringRequest一样
ImageLoader也可以用于加载网络上的图片,并且它的内部也是使用ImageRequest来实现的,不过ImageLoader明显要比ImageRequest更加高效,因为它不仅可以对图片进行缓存,还可以过滤掉重复的链接,避免重复发送请求。
<1> 创建请求队列
mQueue = Volley.newRequestQueue(this);
<2> 创建imageloader对象,其中imageloader的构造方法第二个参数为imageCache的实现类,实现图片缓存的算法类。
imageLoader = new ImageLoader(mQueue, new BitmapCache());
public class BitmapCache implements ImageCache {
private LruCache mCache;
public BitmapCache() {
int maxSize = 10 * 1024 * 1024;
mCache = new LruCache(maxSize) {
@Override
protected int sizeOf(String key, Bitmap bitmap) {
return bitmap.getRowBytes() * bitmap.getHeight();
}
};
}
@Override
public Bitmap getBitmap(String url) {
return mCache.get(url);
}
@Override
public void putBitmap(String url, Bitmap bitmap) {
mCache.put(url, bitmap);
}
}
<3> 获取一个ImageListener对象
ImageListener listener = ImageLoader.getImageListener(imageView,R.drawable.default_image, R.drawable.failed_image);
<4> 调用ImageLoader的get()方法加载网络上的图片。
imageLoader.get("https://img-my.csdn.net/uploads/201404/13/1397393290_5765.jpeg", listener);
当然,如果想对图片的大小进行限制,也可以使用get()方法的重载,指定图片允许的最大宽度和高度.
imageLoader.get("https://img-my.csdn.net/uploads/201404/13/1397393290_5765.jpeg",listener, 200, 200);
除了以上两种方式之外,Volley还提供了第三种方式来加载网络图片,即使用NetworkImageView。
不同于以上两种方式,NetworkImageView是一个自定义控制,它是继承自ImageView的,具备ImageView控件的所有功能,并且在原生的基础之上加入了加载网络图片的功能。
<1> 创建一个RequestQueue对象。
<2> 创建一个ImageLoader对象。
<3> 在布局文件中添加一个NetworkImageView控件
<4> 在代码中获取该控件的实例
networkImageView = (NetworkImageView) findViewById(R.id.network_image_view);
<5> 设置要加载的图片地址
networkImageView.setDefaultImageResId(R.drawable.default_image);
networkImageView.setErrorImageResId(R.drawable.failed_image);
networkImageView.setImageUrl("https://img-my.csdn.net/uploads/201404/13/1397393290_5765.jpeg",imageLoader);