android - volley的使用
发表于:,更新于:,By Sally
        
        Android 网络通信框架 Volley
几个特点
- 支持 - get- post- 网络图片等的高效异步处理请求
- 可以对请求进行排序 
- 支持网络请求缓存 
- 支持多级别取消请求 
- 与activity生命周期联动 
- 不适合数据的上传和下载(如果需要上传和下载,选用别的,eg:okhttp) 
功能
- 高效的get post方式的数据请求交互 
- 网络图片的加载和缓存 
请求包括以下几种对象
- StringRequest : 不清楚数据的返回类型时,使用stringrequest 
- JsonObjectRequest : 返回的是json对象时,使用jsonobjectrequest 
- JsonArrayRequest : 返回的是json数组时,使用jsonarrayrequest 
volley 的使用
先声明请求队列 RequestQueue
- 所有request 请求都是放到这个队列进行处理,所以我们将这个队列声明在Application里,记得在manifest中配置一下myapplication
| 1 | public class MyApplication extends Application { | 
字符数据处理 : StringRequest
get 方式
- 这里使用了4个参数的方法:请求方式,请求地址,请求成功回调,请求失败回调
| 1 | private void volley_get_string() { | 
post 方式
- 参数:请求方式,请求地址,请求成功回调,请求失败回调,重写getParams()方法获得请求参数。
| 1 | private void volley_post_string() { | 
JSON对象数据处理 : JsonObject
get 方法
| 1 | private void volley_get_jsonobject() { | 
post 方法
| 1 | private void volley_psot_jsonobject() { | 
volley 和 activity 的关联
- 在销毁activity时,取消掉该activity的所有请求
| 1 | @Override | 
自定义 volley
- 有时候,我们需要在请求成功时,做些事情;在请求失败时,做些事情;请求多了,每次都写会重复很多。所以就需要自定义volley了
首先:定义 VolleyInterface 抽象类
- 声明一个有3个参数的构造方法,上下文,成功监听回调,失败监听回调 
- 两个抽象方法: 请求成功方法, 请求失败方法 
- 在这里,可以做一些处理,请求成功了做什么,请求失败了做什么 
- 注意:这里的mListener mErrorListener都是静态的,且这两个对象都是在这个文件中创建和使用,自给自足 
| 1 | public abstract class VolleyInterface { | 
接着:定义请求工具类,这里以StringRequest为例
- get方式的参数:上下文,请求地址,tag标签,回调接口 
- post方式的参数:上下文,请求url,tag标签,请求参数params,回调接口 
- 这里记得start一下请求队列 
| 1 | public class VolleyRequest { | 
最后:使用自定义volley实现get请求 : stringrequest
| 1 | private void volley_get() { | 
图片缓存
- ImageRequest : 加载远程图片 
- ImageCache单独使用起不到缓存作用,要搭配- LruCache一起使用
- ImageCache + ImageView : 图片缓存 
- ImageCache + NetWorkImageView : 图片缓存 
ImageRequest 的使用
- 加载远程图片
| 1 | private void volley_img_request() { | 
ImageLoader + ImageCache + LruCache :缓存图片
- 这里需要用到 ImageLoader 类,该对象接受两个参数:请求队列,imagecache 
- 首先:定义一个ImageCache的子类,BitmapCache 
| 1 | public class BitmapCache implements ImageCache { | 
- 接着:获取并显示图片,使用 imageview
| 1 | private void volley_img_loader() { | 
- 接着:获取并显示图片,使用 networkimageView
| 1 | private void volley_img_network() { |