Android Volley

1.volley简单的介绍:

Volley是一个HTTP库,使Android应用程序变得更加容易,最重要的是,网络 得更快。

 

Vollry 提供以下好处:

1.自动调度的网络请求。

2.多个并发的网络连接。

3.透明的磁盘和内存缓存使用标准的HTTP响应缓存一致性

4.支持请求优先级。

5.取消请求API。 你可以取消一个单一的请求,或者你可以设定或块 取消的请求范围。

6.例如,易于定制重试和补偿。

7.强烈的要求,便于正确填充界面与数据获取 异步的网络。

 

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 的使用遵循以下四步: 
1、获取请求队里RequestQueue 

RequestQueue queue = Volley.newRequestQueue(this);

2、启动请求队列 

queue.start()

  以上这两步通常也归为一步 
3、获取请求Request 

StringRequest stringRequest = new StringRequest(...)

4、把请求添加到请求队列中 

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的基本用法就讲到这里、

posted @ 2015-11-30 18:49  丶贰九  阅读(294)  评论(0编辑  收藏  举报