浅谈Volley网络框架(一)

来源:互联网 发布:我所理解的生活 知乎 编辑:程序博客网 时间:2024/06/10 19:01

写这篇文章的时候,我也看过很多博客以及介绍这个框架的视频了!所以这里我就直接挑干货分享给大家!

网络框架是什么玩意?

在开发中,访问网络可能是家常便饭的事。想必大家肯定知道HttpURLConnection和HttpClient这两个东西,你应该是最先认识他俩的,他俩一联手访问网络的问题就解决了,但是缺点也不断不暴漏了出来。就是新手使用的时候,不会加以封装或者封装不好,这样的话会造成复用性差,程序代码冗余。于是后期出现了网络框架,这个网络框架就是所谓的“大神”帮你封装好的,你直接用就行了,并且你担心的问题也会帮你解决,比如你在使用Universal-Image-Loader的时候就不需要考虑开启线程、回收图片资源等问题了。AsyncHttpClient这个框架的话使用起来也是非常简便,还有XUtils等等。可以说网络框架的出现在开发中使用起来非常的简便,实用!

Volley是谁?有啥用啊?

Google一看,这不行啊。这网络框架越来越多,自己却没有一个拿得出手的,于是Google在2013年I/O大会上发布了自己的网络框架–Volley
这个Volley可以说汲取了Universal-Image-Loader和AsyncHttpClient的等其他网络框架的优点,你使用的时候即不用担心操作繁琐,也不用担心线程问题和回收图片的种种问题

Volley的优点:

  1. 通讯更快,更简单。网络模块的稳定性强。这张图是I/O大会上的一张配图,也证实了Volley适合简单的高并发请求,但下载和上传这方面Volley的体现就比较水了

    Look!像美团这种的样式就比较适合Volley
    这里写图片描述

  2. 图像的异步加载
  3. 缓存
  4. 网络请求的优先级处理
  5. 多级别取消请求

上面的都是了解一下就行,和别人唠嗑或面试的时候别不知道Volley的特点,别不知道Volley是哪个公司推出的就行。重点还是接下来,那么下面开始给大家分享干货

Volley的使用

1.你需要先下载一个Jar包,导入到项目中
http://download.csdn.net/detail/sinyu890807/7152015

2.是请求网络,就要添加网络权限!我推荐你创建应用就添加上,这是一个习惯,我一开始总是想写完了在添加,结果就忘了…虽然也不是什么大事

<uses-permission android:name="android.permission.INTERNET" />

3.接下来就可以使用了,不过我个人习惯使用之前先把这个类的结构弄明白了,学底层用顶层,学父类用子类。所以这里我带着大家把接下来要用到的类以及体系结构介绍一下
下面要使用StringRequest类,这个类继承了Request抽象类,通过源码可以看一下StringRequest的构造函数

 public StringRequest(int method, String url, Listener<String> listener,ErrorListener errorListener) {        super(method, url, errorListener);        mListener = listener;    }

上面这个是四个参数的构造函数,可以指明请求方式,他的重载是下面这个

public StringRequest(String url, Listener<String> listener, ErrorListener errorListener) {        this(Method.GET, url, listener, errorListener);    }

可以看出来这个只有三个参数,如果你使用三个参数的构造函数来创建对象的话,那么默认就是GET方式了。

这里我先用三个参数的构造函数演示一把请求,你也可以用四个参数的构造函数创造对象,区别就在于第一个参数(指定请求方式)

参数一url:代表你请求的服务器地址,没什么可说的
后两个参数点击进去我们在看源码

public class Response<T> {    /** Callback interface for delivering parsed responses. */    public interface Listener<T> {        /** Called when a response is received. */        public void onResponse(T response);    }    /** Callback interface for delivering error responses. */    public interface ErrorListener {        /**         * Callback method that an error has been occurred with the         * provided error code and optional user-readable message.         */        public void onErrorResponse(VolleyError error);    }    //....}

得知Listener和ErrorListener都是Response类定义的两个接口,也就是一会要传递的参数就需要实现Listener接口和实现ErrorListener这两个接口的实现类,好,那三个参数都知道了,下面使用就非常的简单了

//创建请求管理队列        RequestQueue queues = Volley.newRequestQueue(MainActivity.this);        //GET请求        StringRequest request = new StringRequest("http://www.baidu.com", new Response.Listener<String>() {            @Override            public void onResponse(String response) {                Toast.makeText(MainActivity.this, response, Toast.LENGTH_SHORT).show();            }        }, new Response.ErrorListener() {            @Override            public void onErrorResponse(VolleyError error) {                Toast.makeText(MainActivity.this, error.getMessage(), Toast.LENGTH_SHORT).show();                           }        });        request.setTag("baiduRequest");//起个名字,方便管理        queues.add(request);//添加到请求队列

那么一个简单的用StringRequest对象进行的GET请求就完事了,下面演示Post请求,可惜的是,从刚才的构造函数得知,两个构造函数的参数都没有Post请求的形参,但是他的父类Request中,有getParams()方法,子类只需要重写这个方法,返回一个Map集合。并在请求的时候指明是Method.Post请求,系统就会自动去找这个方法的实现当做Post请求的参数。看一下下面的例子,我想你就明白怎么用了!

//这里的Post请求用的是聚合数据的接口    RequestQueue queues = Volley.newRequestQueue(MainActivity.this);        StringRequest request = new StringRequest(Request.Method.POST, "http://op.juhe.cn/onebox/news/query", 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) {                Toast.makeText(MainActivity.this,volleyError.getMessage(),Toast.LENGTH_SHORT).show();            }        })        {            /*重写父类的函数,返回的Map用于给Post请求当做参数*/            @Override            protected Map<String, String> getParams() throws AuthFailureError            {                Map<String,String> map = new HashMap();                map.put("key","&q=%E6%99%AE%E4%BA%AC%E5%A4%B1%E8%B8%AA");                return map;            }        };        //这里不给request请求加名字也是可以的,后期与Activity联动的时候会说到        queues.add(request);

看到这了,你应该了解下面的知识点
1.StringRequest继承Request
2.StringRequest的构造函数以及Request中的核心方法
3.创建一个请求的步骤(重要)

  1. 先拿到RequestQueue

  2. 然后创建StringRequest请求,如果是get,指明URL地址并实现Response中的Listener和ErrorListener接口,如果是Post,要指定是Method.POST请求和URL,实现两个接口,并且要重写getParams()

  3. 给请求起个名字setTag(“”)
  4. 将本次请求加入请求队列

如果你看懂了上面的内容,你对Volley的请求基本上就了解了,今天只说了StringRequest请求,下次我还会写JsonRequest下两个直接子类的请求。如果你看了之后,感觉逻辑还是很乱,建议去看看源码或者自己敲一遍

2 0
原创粉丝点击