Volley是google在2013年I/O大会上发布的关于网络请求的框架,其目的是为了解决HttpUrlConnect和
HttpClient(在android6.0中已经被废弃)使用不方便的问题,从字面上我们就可以看出来此框架的优点—-Volley(齐
射,发射),就好像很多人一起射箭,注意:是射箭,不是很多人一起发大炮,这点很重要,也是volley的一个特
性,它支持数据量不大,但是请求频繁的网络请求,如请求文字,图片,然而,如果是音频和视频的下载,这就属
于发大炮的级别了,volley可玩不转,所以使用的时候一定要注意。
Volley特点
- 通信更快,更简单
- Get、Post网络请求及网络图像的高效率异步处理请求
- 排序,对不同的网络请求进行优先级反应处理
- 网络请求的缓存
- 多级别取消请求
- 和Activity生命周期的联动
Volley不适合大文件的上传的下载
Volley框架的使用
Volley的get和post请求方式的使用
Get和Post请求接口数据的使用
· StringReuiest 用于对请求的数据返回结果类型不确定的情况下。StringReuiest涵盖后两种请求对象
· JsonObjectQuest 用于对请求的数据返回JsonObject类型
· JsonArrayRequest 用于对请求的数据返回JsonArray类型
Volley的网络请求队列建立和取消队列请求
使用Volley需要建立一个全局的请求队列,这样我们就可以将一个请求加入到这个全局队列中,并可以管理整个
APP的所有请求,包括取消一个或所有的请求。
Volley与Activity生命周期的联动
Volley中的请求是与Activity的生命周期进行关联。这样可以在Android销毁时关闭Volley的请求,防止请求在后台
运行造成内存溢出等情况发生。与Activity生命周期进行联动时需要设置Tag标签,因为取消请求需要在请求队列中
通过Tag标签进行查找,在Activity的onStop中执行取消请求的操作。
实例演示
使用Volley前需要往项目中导入Volley的jar包。
首先我们需要自定义一个Application用于创建一个全局的请求队列。
MyApplication.java
1 | import android.app.Application; |
AndroidManifest.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.gkdoe.volleydemo">
<uses-permission android:name="android.permission.INTERNET" />
<application
android:name=".MyApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
使用Get方式请求数据返回StringRequest对象
当想返回String类型的请求结果数据或者不清楚返回什么类型时可以用StringRequest对象。
下面使用Get请求方式返回一个String类型的手机归属地信息。
MainActivity.java
1 | import android.support.v7.app.AppCompatActivity; |
使用Get方式请求数据返回JsonObjectRequest对象
MainActivity.java
1 | import android.support.v7.app.AppCompatActivity; |
使用Post方式请求数据返回StringRequest对象
使用Post方式需要手动传递请求参数,可以重写Request类的getParams()方法将请求参数名和参数值放入Map中进行传递。
MainActivity.java
1 | import android.support.v7.app.AppCompatActivity; |
使用Post方式请求数据返回JsonObjectRequest对象
MainActivity.java
1 | import android.support.v7.app.AppCompatActivity; |