美文网首页
网络框架之Volley一:基本使用

网络框架之Volley一:基本使用

作者: code希必地 | 来源:发表于2021-09-01 17:15 被阅读0次

    1、目录

    image.png

    2、简介

    Android系统中主要提供了两种方式来进行HTTP通信:
    HttpUrlConnection和HttpClient。

    示意图.png
    如果直接使用HttpUrlConnection和HttpClient进行网络请求还是比较复杂的,会产生不少重复代码,于是在2013年Google I/O大会上推出了一个新的网络通信框架——Volley。
    - 优点:简单易用,在性能上有较大的提升,只适用于小数据量且网络操作频繁的场景。
    - 缺点:在数据量较大的场景下,Volley性能较差。因为Request和Respone是把数据放在byte数组中,数据量大所占的内存也就比较大。

    2、Volley的基本使用

    使用Volley进行网络请求的步骤如下:

    • 1、创建RequestQueue对象。
    • 2、创建请求Request。
    • 3、添加Request到RequestQueue中。

    2.1、在Activity中创建RequestQueue

    RequestQueue是一个请求队列对象,它缓存了所有的HTTP请求,然后按照一定的算法并发的发出这些请求。RequestQueue内部设计比较适合高并发,所以没必要每一个请求都创建一个RequestQueue,这样非常浪费资源,基本上每一个Activity创建一个RequestQueue即可,并且在页面关闭时还能取消当前页面中的所有请求。
    代码如下:

     queue = Volley.newRequestQueue(this);
    

    2.2、创建Request并添加到请求队列中

    这里先以StringRequest为例发送一个简单的请求

    StringRequest stringRequest = new StringRequest("https://www.baidu.com", new Response.Listener<String>() {
                @Override
            public void onResponse(String s) {
                Log.e(TAG,"结果:"+s);
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError volleyError) {
                Log.e(TAG,"错误:"+volleyError.getMessage());
            }
        });
    queue.add(stringRequest);
    

    这里我们创建了一个StringRequest对象,StringRequest接收三个参数,第一个参数是目标服务器的URL地址,第二个参数是服务器响应成功的回调,第三个参数是服务器响应失败的回调。
    然后将Request对象添加到RequestQueue中,这样就完成了一次网络请求。
    不过大家都知道,网络请求的方式通常有POST和GET两种,上面我们没有指定请求方式,会默认以GET方法进行请求,如果我们需要指定为POST请求,该怎么办呢?那就要使用StringRequest的另一个构造函数了

    public StringRequest(int method, String url, Listener<String> listener, ErrorListener errorListener)
    

    其中method就是请求方式的参数,指定为Method.POST即可。但是如何提交请求参数呢?很遗憾StringRequest并没有提供相应的方法,但是当发送POST请求时Volley会调用StringRequest的父类--Request中的getParams()方法来获取请求参数,在这里设置即可,代码如下:

    StringRequest stringRequest = new StringRequest(Method.POST, url,  listener, errorListener) {
        @Override
        protected Map<String, String> getParams() throws AuthFailureError {
            Map<String, String> map = new HashMap<String, String>();
            map.put("params1", "value1");
            map.put("params2", "value2");
            return map;
        }
    };
    

    2.3、JsonRequest

    学习完StringRequest的使用后,下面看下JsonRequest的用法。类似于StringRequest,JsonRequest也是继承自Request类的,不过JsonRequest是一个抽象类,这里可以使用其子类入手。JsonRequest有两个子类:JsonObjectRequest和JsonArrayRequest,从名字上你应该能就看出它们的区别了吧?一个是用于请求一段JSON数据的,一个是用于请求一段JSON数组的。
    至于它们的用法也基本上没有什么特殊之处,先new出一个JsonObjectRequest对象,如下所示:

    JsonObjectRequest jsonObjectRequest=new JsonObjectRequest(Request.Method.GET, "https://m.weather.com.cn/d/town/index?lat=39.99472&lon=116.45582&areaid=101010300", null
                    , new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject jsonObject) {
                Log.e(TAG,"结果:"+jsonObject.toString());
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError volleyError) {
                Log.e(TAG,"错误:"+volleyError.getMessage());
            }
        });
    queue.add(jsonObjectRequest);
    

    可以看出和StringRequest的使用并没有多少区别,到此为止Volley的基本使用就介绍完毕了。

    相关文章

      网友评论

          本文标题:网络框架之Volley一:基本使用

          本文链接:https://www.haomeiwen.com/subject/dogxwltx.html