Android开源框架之Volley(一)

一、简介

Volley是Google在2003年的I/O大会上推出的通信框架。适用于数据量小、频率高的请求。不适合大数据加载

二、volley的使用

1、创建RequestQueue对象
    RequestQueue queue = Volley.newRequestQueue(context);
2、创建一个request对象,系统提供了几种StringRquest、JsonRequest等等,也可以自定义
    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会把所有的服务器端返回的数据在解析期间缓存进内存。

三、图片加载

1、 使用ImageRequest

用法和StringRequest一样

2、 ImageLoader的用法

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);
3、 NetworkImageView的用法

除了以上两种方式之外,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);

你可能感兴趣的:(Android)