一. 什么是Volley
Volley是Goole I/O 2013上发布的android平台网络通信库,能使网络通信更快,更简单,更健壮。
Volley名字的由来:a burst emission of many things or a large amount at once.
Volley适用于数据量不大但是频繁网络通信的场景。比如写一个listview需要频繁从网络请求图片显示,使用普通的方式可能还需要在adapter的getView中使用ViewHolder重复利用资源,还得处理很多异常情况比如网络请求没完成已经滚动了位置(滚动后不再显示的内容)等等。使用Volley将大大简化这个过程。
1.1 Volley提供的功能
1.1.1 Json,图片等资源的异步下载
1.1.2 网络请求的排序,网络请求的优先级处理
1.1.3 缓存
1.1.4 和Activity生命周期联动(根据生命周期状态做相应的网络请求或者取消网络请求)
1.2 使用前的准备
1.2.1 首先得从git库把项目克隆下来:
git clone https://android.googlesource.com/platform/frameworks/volley
1.2.2 然后将下载后的项目编译为jar包,再在自己的工程里import进来(注意,这个库要求最低SDK版本为Froyo,即至少要设置android:minSdkVersion为8以上)
二. Volley的使用
2.1 下面来简单看看Volley如何使用
2.1.1 简单的get请求(从网络获取Json对象,然后打印出来)
String url = "http://httpbin.org/get?param1=volley"; RequestQueue rq=Volley.newRequestQueue(getApplicationContext()); rq.add(new JsonObjectRequest(Method.GET, url, null, new Listener() { @Override public void onResponse(Object arg0) { Log.d("cwddd", arg0.toString()); } }, null)); rq.start();
2.1.2 为布局文件中的ImageView设置网络资源图片
// im是一个ImageView实例 // ImageLoader.getImageListener的第二个参数是默认的图片resource id // 第三个参数是请求失败时候的资源id,可以指定为0 ImageCache imageCache = new ImageCache() { @Override public void putBitmap(String url, Bitmap bitmap) { } @Override public Bitmap getBitmap(String url) { return null; } }; String urls = "https://www.google.com.hk/images/srpr/logo11w.png"; ImageLoader mImageLoader = new ImageLoader(mQueue, imageCache); ImageListener listener = ImageLoader.getImageListener(im, android.R.drawable.ic_launcher, android.R.drawable.ic_launcher); ImageContainer container = mImageLoader.get(urls, listener); im.setImageBitmap(container.getBitmap());
2.1.3 使用NetworkImageView (Volley提供了一个新的控件NetworkImageView来代替传统的ImageView
//niv 为com.android.volley.toolbox.NetworkImageView实例,在布局文件中声明 niv.setImageUrl(urls, mImageLoader);
通过上面提供的函数便可以从网络获取资源图片为NetWorkImageView赋值
三. 总结
Volley应该是简化了网络通信的一些开发,特别是针对如下两种情况:
- JSON对象
- 图片加载
目前刚接触这个框架,还有很多需要学习的地方,后续会把其它相关的代码分析贴出来,参考备用.
参考Link: