Volley框架全解析

1. Volley简介

     我们平时在开发Android应用的时候不可避免地都需要用到网络技术,而多数情况下应用程序都会使用HTTP协议来发送和接收网络数据。Android系统中主要提供了两种方式来进行HTTP通信,HttpURLConnection和HttpClient,几乎在任何项目的代码中我们都能看到这两个类的身影,使用率非常高。不过HttpURLConnection和HttpClient的用法还是稍微有些复杂的,如果不进行适当封装的话,很容易就会写出不少重复代码。于是乎,一些Android网络通信框架也就应运而生,比如说AsyncHttpClient,它把HTTP所有的通信细节全部封装在了内部,我们只需要简单调用几行代码就可以完成通信操作了。再比如Universal-Image-Loader,它使得在界面上显示网络图片的操作变得极度简单,开发者不用关心如何从网络上获取图片,也不用关心开启线程、回收图片资源等细节,Universal-Image-Loader已经把一切都做好了。

     Android开发团队也是意识到了有必要将HTTP的通信操作再进行简单化,于是在2013年Google I/O大会上推出了一个新的网络通信框架——Volley。Volley可是说是把AsyncHttpClient和Universal-Image-Loader的优点集于了一身,既可以像AsyncHttpClient一样非常简单地进行HTTP通信,也可以像Universal-Image-Loader一样轻松加载网络上的图片。除了简单易用之外,Volley在性能方面也进行了大幅度的调整,它的设计目标就是非常适合去进行数据量不大,但通信频繁的网络操作,而对于大数据量的网络操作,比如说下载文件等,Volley的表现就会非常糟糕。

下图所示的这些应用都是属于数据量不大,但网络通信频繁的,因此非常适合使用Volley。

2. 下载Volley view  

3.   Volley提供的功能     

      1、封装了的异步的RESTful 请求API;

   2、一个优雅和稳健的请求队列;

   3、一个可扩展的架构,它使开发人员能够实现自定义的请求和响应处理机制;

   4、能够使用外部HTTP Client库;

   5、缓存策略;

   6、自定义的网络图像加载视图(NetworkImageView,ImageLoader等);

4.Volley实例

   1 加载json

	public void getJson() {
		RequestQueue requestQueue = Volley.newRequestQueue(this);
		String url = "http://192.168.206.1:8080/Lashou/city";
		JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(
				Request.Method.GET, url, null,
				new Response.Listener() {
					@Override
					public void onResponse(JSONObject response) {
						System.out.println(response.toString());
					}
				}, new Response.ErrorListener() {

					@Override
					public void onErrorResponse(VolleyError arg0) {
						System.out.println("错误");

					}
				});

		requestQueue.add(jsonObjectRequest);

	}
     

   2.异步加载图片

        public void loadImage() {
		String url = "http://img4.imgtn.bdimg.com/it/u=4091019900,2240164028&fm=21&gp=0.jpg";
		RequestQueue requestQueue = Volley.newRequestQueue(this);

		final LruCache lruCache = new LruCache(
				20);
		ImageCache imageCache = new ImageCache() {

			@Override
			public void putBitmap(String key, Bitmap value) {
				lruCache.put(key, value);

			}

			@Override
			public Bitmap getBitmap(String key) {
				return lruCache.get(key);
			}
		};

		ImageLoader imageLoader = new ImageLoader(requestQueue, imageCache);

		ImageListener imageListener = imageLoader.getImageListener(mImg,
				R.drawable.ic_launcher, R.drawable.ic_launcher);
		imageLoader.get(url, imageListener);

	}
    3.使用NetWorkImageView加载图片(Volley自定义的加载网络视图,注意在编译xml时作为自定义view使用。替代ImageVIew,好处,这个框架被父类控件dispach时,自动取消网络请求,不用担心生命周期问题)

      public void loadNewWorkImageView() {
		String url = "http://img4.imgtn.bdimg.com/it/u=4091019900,2240164028&fm=21&gp=0.jpg";
		RequestQueue requestQueue = Volley.newRequestQueue(this);
		final LruCache lruCache = new LruCache(
				20);
		ImageCache imageCache = new ImageCache() {

			@Override
			public void putBitmap(String key, Bitmap value) {
				lruCache.put(key, value);

			}

			@Override
			public Bitmap getBitmap(String key) {
				return lruCache.get(key);
			}
		};

		ImageLoader imageLoader = new ImageLoader(requestQueue, imageCache);
		mNetworkImageView.setTag("url");
		mNetworkImageView.setImageUrl(url, imageLoader);

	}
4 总结

 Volley适合网络请求频繁但数据量不大的网络请求,要根据具体情况使用。

  

 

 源码点击下载

 




你可能感兴趣的:(安卓框架)