1.volley简单的介绍:java
Volley是一个HTTP库,使Android应用程序变得更加容易,最重要的是,网络 得更快。android
Vollry 提供如下好处:算法
1.自动调度的网络请求。json
2.多个并发的网络链接。数组
3.透明的磁盘和内存缓存使用标准的HTTP响应缓存一致性。缓存
4.支持请求优先级。服务器
5.取消请求API。 你能够取消一个单一的请求,或者你能够设定或块 取消的请求范围。网络
6.例如,易于定制重试和补偿。并发
7.强烈的要求,便于正确填充界面与数据获取 异步的网络。app
Volley很是适合去进行数据量不大,但通讯频繁的网络操做,而对于大数据量的网络操做,好比说下载文件等,Volley的表现就会很是糟糕。
2.下载Volley
下载路径:https://android.googlesource.com/platform/frameworks/volley
3.如何使用volley:
Volley提供了一个方便的方法Volley.newRequestQueue
设置一个RequestQueue
,使用默认值,并启动队列。
Vollay已经为咱们实现了 StringRequest、JsonArrayRequest、JsonObjectRequest、ImageRequest请求
Volley的用法很是简单,即发起一条HTTP请求,而后接收HTTP响应。首先须要获取到一个RequestQueue对象,调用以下方法获取到:
RequestQueue queue = Volley.newRequestQueue(this);
RequestQueue是一个请求队列对象,它能够缓存全部的HTTP请求,按照必定的算法并发地发出这些请求。
RequestQueue内部的设计就是很是合适高并发的,所以没必要为每一次HTTP请求都建立一个RequestQueue对象,这是很是浪费资源的,基本上在每个须要和网络交互的Activity中建立一个RequestQueue对象就足够了。
String url ="http://www.baidu.com"; // Request a string response from the provided URL. StringRequest stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() { @Override public void onResponse(String response) { // Display the first 500 characters of the response string. mTextView.setText("Response is: "+ response.substring(0,500)); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { mTextView.setText("That didn't work!"); } }); // Add the request to the RequestQueue. queue.add(stringRequest);
StringRequest的构造函数须要传入4个参数,第一个参数是请求的方式(POST,GET,DELETE,PUT),第二个参数是目标服务器的URL地址,第三个参数是服务器响应成功的回调,第四个参数是服务器响应失败的回调
最后,Volley是要访问网络的,不要忘记在你的AndroidManifest.xml中添加以下权限:
<uses-permission android:name="android.permission.INTERNET" />
如何添加请求参数与头部信息呢?
在StringRequest的匿名类中重写getParams()方法,getHeaders()方法
StringRequest stringRequest = new StringRequest(Request.Method.GET, "http://www.baidu.com",new Response.Listener<String>(){ @Override public void onResponse(String response) { // TODO Auto-generated method stub } } ,new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { // TODO Auto-generated method stub } }){ @Override protected Map<String, String> getParams() throws AuthFailureError { // TODO 添加请求参数 return super.getParams(); } @Override public Map<String, String> getHeaders() throws AuthFailureError { //TODO添加头部 //注意 Content-Type= application/x-www-form-urlencoded 默认已添加 return super.getHeaders(); } };
是否是很简单呢,使用StringRequest就4步:
volley 的使用遵循如下四步:
一、获取请求队里RequestQueue
RequestQueue queue = Volley.newRequestQueue(this);
二、启动请求队列
queue.start()
以上这两步一般也归为一步
三、获取请求Request
StringRequest stringRequest = new StringRequest(...)
四、把请求添加到请求队列中
queue.add(stringRequest );
一样道理
相似于StringRequest,JsonRequest也是继承自Request类的,不过因为JsonRequest是一个抽象类,所以咱们没法直接建立它的实例,那么只能从它的子类入手了。
JsonRequest有两个直接的子类,JsonObjectRequest和JsonArrayRequest,从名字上你应该能就看出它们的区别了吧?
一个是用于请求一段JSON数据的,一个是用于请求一段JSON数组的。
至于它们的用法也基本上没有什么特殊之处,先new出一个JsonObjectRequest对象,以下所示:
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest("http://www.baidu.com", null, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { Log.d("TAG", response.toString()); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Log.e("TAG", error.getMessage(), error); } });
由此能够看出,服务器返回给咱们的数据确实是JSON格式的,而且onResponse()方法中携带的参数也正是一个JSONObject对象,以后只须要从JSONObject对象取出咱们想要获得的那部分数据就能够了。
JsonObjectRequest的用法和StringRequest的用法基本上是彻底同样的,Volley的易用之处也在这里体现出来了,会了一种就可让你触类旁通,所以关于JsonArrayRequest的用法,也是同样的。
Volley的基本用法就讲到这里、