前言
在现在的Android开发之中,已经比较少人使用volley进行网络请求了,之所以现在还写这篇关于Volley的文章,是因为volley是一个优秀的框架,其设计严格遵循了面向对象的设计原则,学习volley的设计原则,对自己的项目开发有比较好的提示作用。
使用方式
1. 导入
在AndroidStudio里面,只需要在Projrct structure里面添加依赖,在搜索框里输入“volley”,直接搜索v,然后点击添加即可。
![image](//upload-images.jianshu.io/upload_images/6003203-08fdbb9473a187fa.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1000/format/webp)
2. 使用
使用相对来说比较简单,首先需要创建一个RequestQueue,然后添加Request即可
RequestQueue queue = Volley.newRequestQueue(this);
queue.add(new StringRequest(Request.Method.POST, "URL", new Response.Listener<String>() {
@Override
public void onResponse(String response) {
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
}));
对于添加的Request,官方默认实现的有以下几种请求方式,当然可以自定制Request,后续会讲到。
原理解析
在详细解释每个步骤的原理之前,先看一下volley的整个UML图
如图,红框部分是整个Volley主要部分,可以看到,最中间的RequestQueue是把所有功能组合起来的类,而整个Volley设计是遵守了依赖倒转原则,即针对接口编程,而不是针对实现编程,由此对于功能的拓展将很容易实现。接下来讲述整个Volley的运作过程。
1. 创建
在详细解释之前,先看一下创建的整体流程,当熟悉整个流程之后,对源码的理解会容易很多。
[外链图片转存失败(img-iAkr8qXk-1563526416241)(//upload-images.jianshu.io/upload_images/6003203-63fb0652f041774b.png?imageMogr2/auto-orient/strip|imageView2/2/w/986/format/webp)]
对于Volley而言,创建是由Volley.newRequestQueue()
开始的,返回一个RequestQueue实例,该静态方法有两个重载,如下
RequestQueue newRequestQueue(Context context);
RequestQueue newRequestQueue(Context context, HttpStack stack);
当使用第一个重载方法时,其实也是调用到第二个方法。
public static RequestQueue newRequestQueue(Context context) {
return newRequestQueue(context, null);
}
第二个参数HttpStack,是用来进行网路请求的,由Volley的整体框架图,可以看出其有两个实现子类,选择哪个子类是有SDK的版本决定的,源码如下:
public static RequestQueue newRequestQueue(Context context, HttpStack stack) {
//放置缓存的地方
File cacheDir = new File(context.getCacheDir(), DEFAULT_CACHE_DIR);
String userAgent = "volley/0";
if (stack == null) {
//如果版本号大于9(V2.3)
if (Build.VERSION.SDK_INT >= 9)