Volley网络请求框架

1.Volley简介

Volley是在2013年Google I/O大会上推出的一个网络通信框架,能够让我们的网络请求变得更加容易和快速。

Volley具有以下优点:

-网络请求的自动调度
-多并发网络连接
-透明的磁盘缓存和内存缓存
-支持请求优先级
-有取消请求的接口,你可以取消一个请求,也可以设置请求取消的块或范围
-很容易定制,如重试,退避
-强大的排序,能够很容易的将从网络中异步请求的数据正确的显示在用户界面。
-具有调试和跟踪工具

Volley适用于通信比较频繁,但是数据量不大的网络请求,而对于数据量大的网络操作,如文件下载,流媒体等操作不适用。

2.Volley的使用

(1)获取Volley的支持

clone Volley的源码到你的电脑:

git clone https://android.googlesource.com/platform/frameworks/volley

将下载的Volley源码作为Android Library 导入到你的项目中。

(2)开始使用

-创建RequestQueue

首先需要创建一个RequestQueue请求队列对象,RequestQueue对象用来管理网络操作的工作线程,读取和写入缓存,解析响应。
我们不需要为每一次Http请求都创建一个RequestQeueue,基本上每一个需要和网络交互的Activtiy创建一个RequestQueue对象
就可以了。

RequestQueue requestQueue=Volley.newRequestQueue(context);

-创建Request请求对象

请求对象有StringRequest,JsonObjectRequest,JsonArrayRequest分别用于请求字符串数据,JSON对象数据,JSON数组数据。
这里以StringRequest为例,创建一个请求对象,以Get方式为例:
请求方式同样Get和Post两种,对应参数: Request.Method.Get 和 Request.Method.Post;

String url = "http://www.baidu.com";
StringRequest stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {

            @Override
       public void onResponse(String s) {
              Toast.makeText(MainActivity.this, s, Toast.LENGTH_SHORT).show();

            }
        }, new Response.ErrorListener() {
            @Override

        public void onErrorResponse(VolleyError volleyError) {
                Log.i(TAG, volleyError.getMessage());
            }
        });

-将请求对象添加到请求队列RequesrQueue中

 requestQueuee.add(stringRequest);

这样就完成了一个StringRequest的请求,请求成功会回调onResponse()方法,请求失败会回调onErrorResponse()方法。
这两个方法都是工作在主线程中,可以在这两个方法里直接对UI做更新。

上面由于使用的是Get请求,所以没有携带请求参数,如果是Post请求,需要携带请求参数,需要重写
StringRequest的getParams()方法,如下:

 String url = "http://192.168.0.102:8080/HttpServer/TestServlet";

StringRequest stringRequest = new StringRequest(Request.Method.POST, url, listener, errorListener) {
            @Override
        protected Map<String, String> getParams() throws AuthFailureError {
         Map<String, String> map = new HashMap<String, String>();
                map.put("key", "value");  //携带的请求参数
                return map;
            }
        };

   requestQueue.add(stringRequest);

//为了代码的美观,listener和errorListener都在外面定义实现。
Response.Listener<String> listener = new Response.Listener<String>() {
        @Override
        public void onResponse(String s) {
            Toast.makeText(MainActivity.this, s, Toast.LENGTH_SHORT).show();
        }
    };

    Response.ErrorListener errorListener = new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError volleyError) {
            Log.i(TAG, volleyError.getMessage());
        }
    };

这就是StringRequest的Post请求的实现。

-JsonRequest

介绍了StringRequest,再来介绍一下JsonRequest,请求的是Json数据,JsonRequest也是继承自Request的,不过JsonRequest是一个抽象类,我们使用的是它的两个实现类,JsonObjectRequest和JsonArrayRequest,
使用和StringRequest是相类似的,如下:

   JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.Get, url, null,
          new Response.Listener<JSONObject>() {
                    @Override
               public void onResponse(JSONObject jsonObject) {
                        Toast.makeText(MainActivity.this, jsonObject.toString(), Toast.LENGTH_SHORT).show();

                    }
                },
            new Response.ErrorListener() {
                    @Override
                 public void onErrorResponse(VolleyError volleyError) {
                        Log.i(TAG, volleyError.getMessage());
                    }
                }

        );
        requestQueue.add(jsonObjectRequest);

这个时候,服务器端返回的直接是一个JSONObject数据,服务器返回如下

 PrintWriter out = response.getWriter();
 JSONObject jsonObject = new JSONObject();
        jsonObject.put("result", "欢迎访问服务器");
        out.println(jsonObject);
        out.flush();
        out.close();        

请求成功后onResponse()中Toast出 {“result”,”欢迎访问服务器”};
至于JsonArrayRequest的用法也是相类似的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值