Android网络编程(2) Volley框架
前一章说的都是过时的方法,实际应用中,使用的更多是开源的网络请求框架。
这里只讲 Volley 框架
特点
- 通信快
- get post 网络请求及网络图像的高效率异步处理请求
- 对请求排序
- 网络请求的缓存
- 多级别取消请求
- 和 Activity 联动,可以在 Activity 销毁的时候同时关闭请求
使用 StringRequest
①在 Application 类中建立全局的请求队列,整个 app 的请求队列都由它来管理
(Application类是为了那些需要保存全局变量设计的基本类,你可以在 AndroidManifest.xml 的<application>标签中进行自己的实现,这样的结果是:当你的application或者包被建立的时候将引起那个类被建立。)
public class MyApplication extends Application
{
public static RequestQueue requestQueue1;
@Override
public void onCreate()
{
super.onCreate();
//初始化请求队列,并通过参数指定为整个 application 的请求队列
requestQueue1 = Volley.newRequestQueue(getApplicationContext());
}
//声明一个方法,该方法可以获取这个队列
public static RequestQueue getHttpQueues()
{
return requestQueue1;
}
}
别忘了注册到 Manifest 中以及添加网络权限

②
- get 方式

③
- post 方式

使用 JsonRequest
类似于StringRequest,JsonRequest也是继承自Request类的,不过由于JsonRequest是一个抽象类,因此我们无法直接创建它的实例,那么只能从它的子类入手了。JsonRequest有两个直接的子类,JsonObjectRequest和JsonArrayRequest,从名字上你应该能就看出它们的区别了吧?一个是用于请求一段JSON数据的,一个是用于请求一段JSON数组的。
使用方法是一样的,将 String 对象变成 JsonRequest 对象即可
需要注意的是
-
使用 get 方法时,
-
使用 post 方法时,需要上传的参数要用 JSON 对象,在 new json 的请求队列时,将该对象作为参数传递,而不是通过像创建 StringRequest 对象而重写 getParams 的方式。

解析得到的 json 对象
例如下面这个接口提供的返回 JSON 的格式

我们在 new Response.Listener 后重写 onResponse 方法时,将得到的 JSON 对象作为参数进行处理,方法有

这样,比如对于键 “status” ,他的键值为 int 类型切数值为 200,我们可以用 getInt 方法获得,同样,键 “data” 为 JSONObject 类型,我们用 getJSONObject 方法来获取,再一层层往下获取相应的参数。