Android Volley框架及其get,post方式的使用

欢迎转载,转载请标明出处^_^

2013年Google在 I/O大会上发布了Volley框架,它是Android平台上的开源网络通信库,封装了Http网络请求,异步任务,缓存,图片下载等功能。特点是能使网络通信更简单,更快速,更稳定。尤其适合处理数据量不大,但是网络通信频繁的场景。
Android-Volley的功能如下:

1:JSON,图像等的异步下载;
2: 网络请求的排序(scheduling)
3:缓存
4: 网络请求的优先级处理
5:多级别取消请求
6:和Activity生命周期的联动

Android-Volley的使用步骤::

1:加载Volley.jar至项目libs目录,添加依赖。
2:创建RequestQueue请求队列。
3:创建Request对象。Request是抽象类,我们常用的子类对象有StringRequestImageRequetJsonArrayRequestJsonObjectRequest
Request对象添加到RequestQueue中。
注意当使用Volley进行Post请求并传递参数的时候,需要重写Request对象的getParams方法。

1:StringRequest的用法:

使用StringRequest进行网络请求的实现过程如下:
1、 创建RequestQueue请求队列
代码:RequestQueue requestQueue = Volley.newRequestQueue(this);
2、 创建StringRequest对象,构造函数说明如下

1:
StringRequest(int method, //请求方式, 0:GET, 1:POST默认为Get
String url, //请求网址
Response.Listener listener, //响应成功监听接口
Response.ErrorListener errorListener)//响应错误监听接口

2:
StringRequest(String url, //网址
Response.Listener listener, //响应成功监听接口
Response.ErrorListener errorListener)//响应错误监听接口

3、将StringRequest对象添加到请求队列中
代码:requestQueue.add(StringRequest);

StringRequest小实例(GET请求):

private void stringRequest(String url){
        StringRequest stringRequest = new StringRequest(url,
                new Response.Listener() {
                //onResponse(String s)中的s是系统自动调用并返回的字符串,可以是json,html,xml等等。
                    @Override
                    public void onResponse(String s) {
                    //这里执行网络连接成功后的操作,比如读取数据等,这里是笔者基于本地的测试,直接复制代码不可运行,读者可自己实现其他功能,例如可返回百度首页的html代码
                        try {
                            JSONObject jsonObject = new JSONObject(s);
                            if (jsonObject.has("name")){
                                Toast.makeText(getBaseContext(),jsonObject.get("name").toString(),Toast.LENGTH_SHORT).show();
                            }
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }

                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError volleyError) {
                    //这里执行网络连接失败的操作,比如一些提示等等。
                        Toast.makeText(getBaseContext(),"网络异常",Toast.LENGTH_SHORT).show();
                    }
                }
        );
        //添加请求
        requestQueue.add(stringRequest);
    }

StringRequest小实例(POST请求):

在Volley框架中,POST请求方式也使用StringRequest对象来完成,StringRequest继承自基类RequestRequest类里面有一个getParams()方法用于获取参数,但是并没有为我们实现这个方法,这就需要我们自定义一个类去继承StringRequet,并且重写getParams()方法。

实例:

新建类VolleyStringPost继承StringRequest

public class VolleyStringPost extends StringRequest {
    private Map map;
    public VolleyStringPost(String url,
                            Response.Listener listener,
                            Response.ErrorListener errorListener) {
        //Method.POST是post请求
        //这里系统提供了两个构造,另一个构造中有int method参数,0:get,1:post,默认是get
        //这里选择无int method的构造,但在super()中传入了Method.POST(系统值,值为1),也就规定了该方法就是post方式
        //这样的好处,不用再传入int method参数
        super(Method.POST,url, listener, errorListener);
        map = new HashMap();
    }

    //该方法自己定义,用于传入参数
    public void putValues(String key,String values){
        map.put(key,values);
    }

    //post方式必须重写该方法,里面只需返回map即可,系统自动调用
    @Override
    protected Map getParams() throws AuthFailureError {
        return map;
    }
}

调用:

//用法同get方式一样
private void stringRequestPost(String url){

    //这里实例的是 VolleyStringPost ,因为继承StringRequest,所有结构同StringRequest一样。
        VolleyStringPost post = new VolleyStringPost(url,
                new Response.Listener() {
                    @Override
                    public void onResponse(String s) {
                        //连接成功操作
                        Toast.makeText(getBaseContext(),s,Toast.LENGTH_SHORT).show();
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError volleyError) {
                    //连接失败操作
                        Toast.makeText(getBaseContext(),"网络异常",Toast.LENGTH_SHORT).show();
                    }
                }
        );
        //调用VolleyStringPost 中的putValues()方法,传入参数
        post.putValues("option","getUser");
        //添加请求
        requestQueue.add(post);
    }

以上就是Android Volley框架的基本介绍及其get,post方式的使用,若有补充,会持续更新。

你可能感兴趣的:(技术篇)