1.Volley简介
Volley是Android平台上的网络通信库,能使网络通信更快、更简单、更健壮。那么在2013年的Google I/O大会上volley发布了。
Volley名称的由来: a burst or emission of many things or a large amount at once,下面是Google为Volley的配图:
从中可以看出,volley适合通讯频率高,但传输数据量小的情景。
(1).获取JSON对象
(2).图片的异步加载
3.Volley架构
Volley使用了线程池来作为基础结构,主要分为主线程、cache线程、network线程。主线程和cache都只有一个,而network线程可以有多个,这样就能解决并行问题。详细可以参考下图,选自Google I/O 2013演讲
4.使用Volley
4.1 从git库克隆一个下来
git clone https://android.googlesource.com/platform/frameworks/volley
4.2 从服务端获取json数据
1 //获取json数据 2 public void getJSONVolley(){ 3 String url = "http://192.168.1.120:8080/VolleyTest?format=json"; 4 //创建请求队列 5 RequestQueue requestQueue = Volley.newRequestQueue(this); 6 //创建json请求对象 7 JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET,url,null,new Response.Listener<JSONObject>() { 8 @Override 9 public void onResponse(JSONObject response) { 10 Log.i("response","response is:"+response.toString()); 11 } 12 },new Response.ErrorListener() { 13 @Override 14 public void onErrorResponse(VolleyError volleyError) { 15 Log.e("error",volleyError.getMessage().toString());//打印异常信息 16 } 17 }); 18 requestQueue.add(jsonObjectRequest); 19 }
4.3 volley中使用ImageView加载图片
1 //加载图片 2 public void loadImageVolley(){ 3 String url = "http://news.xnnews.com.cn/ylxw/201502/W020150203612623574709.jpg"; 4 RequestQueue requestQueue = Volley.newRequestQueue(this); 5 final LruCache<String,Bitmap> lruCache = new LruCache(20); 6 ImageLoader.ImageCache imageCache = new ImageLoader.ImageCache() { 7 @Override 8 public Bitmap getBitmap(String key) { 9 return lruCache.get(key); 10 } 11 @Override 12 public void putBitmap(String key, Bitmap value) { 13 lruCache.put(key,value); 14 } 15 }; 16 ImageLoader imageLoader = new ImageLoader(requestQueue,imageCache); 17 ImageLoader.ImageListener imageListener = imageLoader.getImageListener(imageView,R.drawable.ic_launcher,R.drawable.ic_launcher); 18 imageLoader.get(url,imageListener); 19 }
4.4 使用NetworkImageView异步加载图片
1 //异步加载图片 2 public void networkImageView() { 3 String url = "http://news.xnnews.com.cn/ylxw/201502/W020150203612623574709.jpg"; 4 RequestQueue requestQueue = Volley.newRequestQueue(this); 5 final LruCache<String,Bitmap> lruCache = new LruCache(20); 6 ImageLoader.ImageCache imageCache = new ImageLoader.ImageCache() { 7 @Override 8 public Bitmap getBitmap(String key) { 9 return lruCache.get(key); 10 } 11 @Override 12 public void putBitmap(String key, Bitmap value) { 13 lruCache.put(key,value); 14 } 15 }; 16 ImageLoader imageLoader = new ImageLoader(requestQueue,imageCache); 17 networkImageView.setTag(url); 18 networkImageView.setImageUrl(url,imageLoader); 19 }
5.总结
在请求json数据和图片异步加载时,可以考虑使用Volley,有兴趣的可以读下Volley的源码。
Google I/O 2013 网络框架Volley演讲pdf地址:http://download.csdn.net/detail/t12x3456/5686041
Google Volley源码下载地址:http://download.csdn.net/detail/u013165880/8452853