Volley 的使用以及自定义Request

一.什么是 Volley


2013年Google I/O大会上推出了一个新的网络通信框架。Volley是Android平台上的网络通信库,能使网络通信更快,更简单,更健壮。Volley特别适合数据量不大但是通信频繁的场景。

二.使用

1. 简单请求

现在,我访问百度首页通过 Volley 提供给我的 Request-->StringRequest()

从图中,可以到 StringRequest 这个类需要我们提供--请求方式(是 get 还是 post),请求地址,正确返回数据接口的回调和请求发生错误接口的回调!!


大家有可能注意到了,当我们写完请求之后,我们就像请求队列里添加了这个请求,之后请求就执行啦!!这只是GET请求!


那接下来,我给大家演示一下 post 的请求。请看图

从图中大家可以看到了!我只是修改了一下请求方式,把 get 改成了 post! 另外,我重写了 Request 这个方法中的 getParams() 方法!那它是干什么用的呢?他就是返回我们的请求参数的!使用者只要把 key-value放入 HashMap中就行啦!


不知道,大家注意到没有!这两个请求我都调用了这个方法 request.setTag("baidu"); 我为啥要调用这个方法嘞?其实是有原因的!在Volley框架中,我们可以给每个请求设置tag,这样我们就可以在 activity 或者 fragment 生命结束的时候(onDestory())中在代用这个方法 queue.cancelAll("baidu"); 这个就可以取消正在请求的请求了(当然tag要一致哦)。避免出现空指针异常!

2.自定义请求

首先,我们来看一下 StringRequest 类的源码:

从图中,我们可以看到,StringRequest 也是继承 Request 这个泛型类的。继承这个类,我们要重写来两个方法
deliverResponse(String response) 和 parseNetworkResponse(NetworkResponse response) 这个两个方法具体做什么,我已在图中写了注释!其实很简单!如果,看懂了这个,我们就可以自己写 Request 了!在这个我还说明一下
NetworkResponse 这个类中包含了服务器返回的结果,返回头等。其中的 response.data 这个是一个 byte 数组!
response.headers 这个是请求头数据! HttpHeaderParser.parseCharset(response.headers) 这个就是服务器返回的编码方式!之后就是简单的 new 个字符串了!

-----------------------------------------开始自定义喽-------------------------------------

大家在平时的开发中和服务器的数据交互一般都是 json 格式的数据!那么现在就来自定义个 JSONRequest 请求!我先直接上代码

可以看到,JSONRequest 是继承自 Request 类的。在parseNetworkResponse()方法中,先是将服务器响应的数据解析出来,然后通过调用 FastJson 的 parseObject 方法将数据组装成对象。在deliverResponse方法中仍然是将最终的数据进行回调.



在这里,我想先说一下我在继承 Request 时比较常覆写的几个方法以及它们的含义!

Map<String, String> getParams();用来返回请求参数的。

Map<String, String> getHeaders();用来返回请求头的!我们可以用来返回指定的请求头!

RetryPolicy getRetryPolicy();用来返回超市时间的!

String getParamsEncoding();用来返回请求数据的编码的!

好了至此。Volley 的讲解就此完了!!接下的博文 我就开始写 Volley 了!第一次说源码方面的东西~~~

Volley 的使用以及自定义Request的更多相关文章

  1. Volley(五)—— 自定义Request

    详细解读Volley(四)—— 自定义Request Volley中提供了几个Request,如果我们有特殊的需求,完全可以自定义Request的,自定义Request自然要继承Request,那么本 ...

  2. 详细解读Volley(四)—— 自定义Request

    Volley中提供了几个Request,如果我们有特殊的需求,完全可以自定义Request的,自定义Request自然要继承Request,那么本篇就教大家来一步一步地定义一个自己的Request类. ...

  3. Volley自定义Request及使用单例封装RequestQueue

    一.自定义Request Volley的所有的请求的超类型是Resuest,所有我们常用的请求都是这个类的子类,那么我们自定义View肯定也是基于这个类的. 案例: package com.zhy.v ...

  4. Android Volley 之自定义Request

    转载标明出处:http://blog.csdn.net/lmj623565791/article/details/24589837 今天群里一哥们需要自定义Volley的Request的例子,于是产生 ...

  5. Volley(二)—— 基本Request对象 & RequestQueue&请求取消

    详细解读Volley(一)—— 基本Request对象 & RequestQueue&请求取消 Volley它非常适合去进行数据量不大,但通信频繁的网络操作,而对于大数据量的网络操作, ...

  6. 详细解读Volley(一)—— 基本Request对象 & RequestQueue

    Volley它非常适合去进行数据量不大,但通信频繁的网络操作,而对于大数据量的网络操作,比如说下载文件等,Volley的表现就会非常糟糕.所以不建议用它去进行下载文件.加载大图的操作.有人可能会问,如 ...

  7. Volley(三)—— ImageRequest & Request简介

    Volley(三)—— ImageRequest & Request简介 上 篇文章我们讲 到了如何用volley进行简单的网络请求,我们可以很容易的接受到string.JsonObjec类型 ...

  8. [Android] 开源框架 Volley 自定义 Request

    今天在看Volley demo (https://github.com/smanikandan14/Volley-demo), 发现自定义GsonRequest那块代码不全, 在这里贴一个全的. pu ...

  9. Android网络开发之Volley--Volley自定义Request

    1.自定义一个解析Json的Request,这里使用JackSon框架来解析Json.你也可以自定义一个解析XML的Request,或者使用FastSon来解析Json. 2.我们首先来看一下Stri ...

随机推荐

  1. bootstrap的两种在input框后面增加一个图标的方式

    第一种: <div class="input-group"> <div class="input-icon-group"> <di ...

  2. Hibernate HQL详解

    版权声明:本文为博主原创文章,如需转载请标注转载地址. 博客地址:http://www.cnblogs.com/caoyc/p/5606444.html  1.实体查询: hql="FROM ...

  3. Unix 网络编程 dup和dup2函数

    dup和dup2也是两个很实用的调用,它们的作用都是用来复制一个文件的描写叙述符. 它们经经常使用来重定向进程的stdin.stdout和stderr.这两个函数的原形例如以下: #include & ...

  4. 人工智能 VS 机器学习 VS 深度学习

    (原文:) The Difference Between AI, Machine Learning, and Deep Learning? (译文:) 人工智能 . 机器学习 和 深度学习的区别? 作 ...

  5. 基于委托的C#异步编程的一个小例子 带有回调函数的例子

    我创建的是一个winform测试项目:界面如下: 设置: 下面是代码: using System; using System.Collections.Generic; using System.Com ...

  6. Intellij IDEA配置优化

    1. 在线激活 安装IntelliJ IDEA 2016.1.2版本后,在联网状态下激活.Help --> Register,选择lisence server,粘贴地址http://idea.i ...

  7. C#代码覆盖率 -vsinstr和OpenCover

    最近接触的项目涉及到C#开发的应用,测试过程中我们需要去分析C#的代码覆盖率,问了一些人,在网上也搜了一些,零碎的找到很多资料,但是都不是很完整,实际使用的过程中还是走了不少弯路.到现在为止,有两种可 ...

  8. js setInterval()函数 [倒计时用]

    定义和用法:        setInterval() 方法用于在指定的毫秒数后调用函数或计算表达式.它与setTimeout()方法不同的是前者可以无限的循环,不会受调用函数的限制,要想退出此循环可 ...

  9. 解决Ubuntu下博通网卡驱动问题

    sudo apt-get install bcmwl-kernel-source我的无线网卡是BCM4312 802.11b/g 在12.04 会集成驱动,装完就能用,现在用14.04,16.04里面 ...

  10. 使用java语言如何更好的使用多线程?

    ① 高并发.任务执行时间短的业务,线程池线程数可以设置为CPU核数+1,减少线程上下文的切换. ② 并发不高.任务执行时间长的业务要区分开看: 假如是业务时间长集中在I/O操作上,也就是I/O密集型的 ...