参考:html
Android网络通讯库Volley简介java
Google I/O 2013 – Volley: Easy, Fast Networking for Android(ppt)android
一、什么是volley
Volley是Ficus Kirpatrick在Gooogle I/O 2013发布的一个处理和缓存网络请求的库,能使网络通讯更快,更简单,更健壮。Volley名称的由来: a burst or emission of many things or a large amount at once。在Google IO的演讲上,其配图是一幅发射火弓箭的图,有点相似流星。见下图

二、volley能作什么
volley适合小而快的数据传输。Volley应该是简化了网络通讯的一些开发,特别是针对如下两种状况:
Volley的便利功能:
Advantages of using Volley:
- Volley automatically schedule all network requests. It means that Volley will be taking care of all the network requests your app executes for fetching response or image from web.
- Volley provides transparent disk and memory caching.
- Volley provides powerful cancellation request API. It means that you can cancel a single request or you can set blocks or scopes of requests to cancel.
- Volley provides powerful customization abilities.
- Volley provides Debugging and tracing tools
三、volley架构
Volley使用了线程池来做为基础结构,主要分为主线程,cache线程和network线程。主线程和cache线程都只有一个,而NetworkDispatcher线程能够有多个,这样能解决比并行问题。具体能够参考下图,此图节选自Google I/O 演讲。git

四、使用volley
4.1 获取volley
引入Volley很是简单,首先,从git库先克隆一个下来:web
- git clone https://android.googlesource.com/platform/frameworks/volley
而后编译为jar包,再在本身的工程里import进来。若是git下载失败能够在这下载。 VolleyLibjson
4.2 JsonObjectRequest 简单文本请求
使用下面的代码实现json数据获取
- mRequestQueue = Volley.newRequestQueue(this);
- String url = "http://pipes.yahooapis.com/pipes/pipe.run?_id=giWz8Vc33BG6rQEQo_NLYQ&_render=json";
- pd = ProgressDialog.show(this,"Please Wait...","Please Wait...");
-
- JsonObjectRequest jr = new JsonObjectRequest(Request.Method.GET,url,null,new Response.Listener<JSONObject>() {
- @Override
- public void onResponse(JSONObject response) {
- Log.i(TAG,response.toString());
- parseJSON(response);
- va.notifyDataSetChanged();
- pd.dismiss();
- }
- },new Response.ErrorListener() {
- @Override
- public void onErrorResponse(VolleyError error) {
- Log.i(TAG,error.getMessage());
- }
- });
- mRequestQueue.add(jr);
4.3 ImageView
使用volley异步加载图像
- RequestQueue mRequestQueue = Volley.newRequestQueue(this);
- final LruCache<String, Bitmap> mImageCache = new LruCache<String, Bitmap>(
- 20);
- ImageCache imageCache = new ImageCache() {
- @Override
- public void putBitmap(String key, Bitmap value) {
- mImageCache.put(key, value);
- }
-
- @Override
- public Bitmap getBitmap(String key) {
- return mImageCache.get(key);
- }
- };
- ImageLoader mImageLoader = new ImageLoader(mRequestQueue, imageCache);
-
-
-
- ImageListener listener = ImageLoader
- .getImageListener(imageView, android.R.drawable.ic_menu_rotate,
- android.R.drawable.ic_delete);
- mImageLoader.get("http://a.hiphotos.baidu.com/album/h%3D800%3Bcrop%3D0%2C0%2C1280%2C800/sign=5f024b518326cffc762ab2b2893a29e2/72f082025aafa40fa3bcf315aa64034f79f019fb.jpg", listener);
-
4.4 NetworkImageView
NetworkImageView是继承自ImageView,是Volley提供的一个全新的简单加载图片的控件。api
- NetworkImageView netImgView=(NetworkImageView)findViewById(R.id.volley_img_networkimgeview);
- netImgView.setTag("url");
-
- netImgView.setImageUrl("http://a.hiphotos.baidu.com/album/h%3D800%3Bcrop%3D0%2C0%2C1280%2C800/sign=5f024b518326cffc762ab2b2893a29e2/72f082025aafa40fa3bcf315aa64034f79f019fb.jpg",mImageLoader);