Volley学习笔记

来源:互联网 发布:淘宝一个心要多少单 编辑:程序博客网 时间:2024/06/06 17:39

博主最近面试屡屡失败,究其原因发现还是自己学习的深度不够。作为一名Android开发工程,由中级向高级进阶真的很不容易。今天起,开始逐步把所有面试中遇到的问题一一解决,弄清楚。一方面是给自己一个学习的动力,另外也能够帮助其他同阶段的朋友们加深,理解。话不多说,直奔主题,开始volley的学习,探讨。

网络作为android开发中必不可少的一环,有着相当的重量。现阶段,一提起网络开发框架,我们所熟知的有volley,okhttp,retrofit。博主所在单位用的是volley,故面试时候都围绕着volley进行提问,然而博主平时开发的时候都是用的已经封装好的代码,也就没有深入研究。但是面试的时候,面试官总是问,为了以后不被问住,就要搞懂它。

关于volley的库包下载引用等问题,博主不再细写,网上有很多大神写的已经相当好了,这里博主主要是参考郭林的volley解析一文,有兴趣的读者可以去看郭神的文章,这里只是博主以笔记的形式记录,并加以自己的理解。

这里附上郭神的文章链接Android Volley完全解析(一),初识Volley的基本用法

volley是2013年googl I/O大会上推出的一个新的网络通信框架。volley的优势在于它适合数据量不大,但是通信频繁的网络操作。如遇到下载文件等情况时,volley的表现就不尽如人意了。

volley的用法比较简单,先从Http请求说起。即发送一条HTTP请求,然后接收HTTP响应。首先需要获取一个RequestQueue对象,需要以下方法:

RequestQueue mQueue = Volley.newRequestQueue(context);

这里拿到的=RequestQueue是一个请求队列对象,它可以缓存所有HTTP请求,然后按照一定的算法并发地发出这些请求。由于RequestQueue设计的非常适合高并发,因为我们不需要创建多个RequestQueue对象来满足多个HTTP请求,一般一个Activity中创建一个RequestQueue对象就够了。

接下来,为了发出一条HTTP请求,我们还需要创建一个StringRequest对象,StringRequest构造函数需要传入三个参数,第一个参数是目标服务器的URL地址,第二个参数是服务器响应成功回调,第三个参数是服务器响应失败的回调。其中第一个参数是一个String地址,第二个是Response里的listener方法,第三个是Response里的errorListener方法。

生成StringRequest对象后,将其添加到RequestQueue里面就可以了。使用 mQueue.add(stringRequest)。同时,别忘了想要访问网络,要在AndroidManifest.xml文件中添加权限。

完成了以上三步,一个简单的网络请求就算发送完成了。

不过,通常HTTP请求类型分为GET和POST两种。刚才的那种是GET方式,同样的volley也为我们准备了POST请求方式。

POST方式是StringRequest中的四参数构造方法。在之前的三参构造方法基础之上,把第一个位置多添加一个Method.POST参数就可以指定此次请求为POST方式了。但是大家都知道,POST请求方式需要传POST参数,而刚刚这个构造是没有POST参数的,这就需要我们设置一下POST参数。

具体怎么设置呢,当发出POST请求时,Volley会尝试调用StringRequest的父类——Request中的getParams方法来获取POST参数,解决方法也随之而来。在使用四参构造方法生成StringRequest对象时,我们要重写getParams方法,这样就可以在重写的方法里设置POST参数了。

因为Volley是开源的,所以只要我们愿意,就可以封装出一个适合自己项目应用的volley版本。

通过上面的学习,我们已经掌握了最基本的HTTP请求方法,接下来学习一下进阶的JsonRequest用法。JsonRequest也继承Request类,不过JsonRequest是一个抽象类,因此我们无法直接创建,只能从其子类入手。JsonRequest有两个直接的子类,JsonObjectRequest和JsonArrayRequest,从名字上我们就能猜出,一个是请求JSON数据,一个是请求JSON数组。它们的用法如下。

JsonObjectRequest对象的构造方法与之前的StringRequest相似,也是一个三参构造方法,同样放入URL地址,回调响应,以及错误响应。

创建好后,将jsonObjectRequest对象以add方法加入RequestQueue请求队列中即可。通过返回结果的打印我们可以看出,JsonObjectRequest请求返回的结果确实是Json格式的。

JsonArrayRequest使用方法与JsonObjectRequest一致。

郭神的volley解析第一章就到这里,稍作休息,后续开始第二章的学习。

在第一章的学习中,主要学习了volley框架HTTP请求的最基本用法。一个网络请求主要分三步,第一步,创建一个请求队列对象。第二步,创建一个StringRequest对象,也可以是JsonObjectRequest或JsonArrayRequest对象。这类对象,在构造时可以使用三参构造,也可以使用四参构造。三参构造默认为GET请求,四参构造多用于POST请求。同时在进行POST请求时,还是记得重写方法中的getParams方法,从而在重写的时候进行POST参数的设置。