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

2021-09-01  本文已影响0人  code希必地

1、目录

image.png

2、简介

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

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

2、Volley的基本使用

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

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的基本使用就介绍完毕了。

上一篇下一篇

猜你喜欢

热点阅读