Volley(一)
为什么使用Volley
Android提供了两个HTTP库给开发者来进行实现一个HTTP请求,一个是AndroidHttpClient (从apache HttpClient拓展而来),另一个是HttpUrlConnection。两者都互有优缺点。当我们开发一个应用,一般来说,我们会写一些Http连接类,这些类可以处理所有Http请求,创建后台线程,管理线程池,解析response,缓存response,处理异常状态码、SSL连接,实现并行或者串行请求。每一个开发者都有自己的方式去实现这些方法。有些人可能会用AsycnTask在后台完成网络请求,有些人可能经过处理程序从UI线程创建HTTP连接类,然后在工作线程执行网络操作,再使用处理程序解析HTTP response返回主线程。
但是我们最终会重复编写相同的样板代码,我们试图在我们的应用程序重复造轮子。
例如,下面的代码片段,在AysncTask的doBackground 里实现一个HTTP请求。当我们获取response,把数据从HttpUrlConnection的输入流拷贝到输出流,然后把输出流再转化成我们最终想要的JsonObject。所有这些样板代码在我们的代码中重复出现。
HttpURLConnection urlConnection = null;
try {
URL url = new URL("http://www.android.com/");
urlConnection = (HttpURLConnection) url.openConnection();
InputStream in = new BufferedInputStream(urlConnection.getInputStream());
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024]; // Adjust if you want
int bytesRead;
while ((bytesRead = in.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
JSONObject resultJSON = new JSONObject(outputStream.toString()); }catch (Exception e) {
e.printStackTrace();
} finally {
urlConnection.disconnect();
}
所以谷歌提出volley,帮助开发人员处理相关的所有网络操作,这样开发人员可以集中精力实现HTTP响应后的业务逻辑。从而可以更少的网络代码调用,这样可以帮助开发者减少bug数量。
注意Volley在大文件操作中并不很适用,如上传/下载,这些case,还需要使用原始的方法
以下是Volley的一些关键特性:
为Android提供更快的网络请求
在后台线程中调度、并行实现所有HTTP请求并管理这些线程
提供灵活的方法来同步并发运行你的网络请求
带有内置的Json解析器
可以设置请求的优先级
为某些情况提供重试策略,如超时,内部服务器错误
可以很灵活的取消请求
提供图片的内存和磁盘缓存,批量处理下载
可以很灵活的实现自己的缓存
可以实现自己的HTTPStack(处理SSL连接,PATCH请求)
请求可以跟踪调试
可以和Activity和生命周期的联动(Activity结束时同时取消所有网络请求)
集成Volley项目
从git资源库Clone Volley项目:
git clone https://android.googlesource.com/platform/frameworks/volley
可以通过两种方式集成
生成Volley.jar,放到libs目录
把volley项目作为一个library依赖
使用Volley主要涉及连个类RequestQueue 和Request
RequestQueue ---调度请求队列并在工作线程执行请求,然后响应给主线程
Request---所有的网络请求都可以通过此类来创建,它提供了一个HTTP请求所需的主要参数,譬如:
请求类型-GET,POST,PUT,DELETE
URL
请求数据(HTTP Body)
成功响应监听
错误监听
简单使用
初始化RequestQueue
JsonObjectRequest
StringRequest
GsonRequest
当然你也可以自定义Request,使得其可以返回对应的Java类型。譬如,我们可以用Gson来自定义一个Request。
使用的时候和StringRequest和JsonObjectRequest差不多
Volley(一)的更多相关文章
- 快速Android开发系列网络篇之Volley
Volley是Google推出的一个网络请求库,已经被放到了Android源码中,地址在这里,先看使用方法 RequestQueue mRequestQueue = Volley.newRequest ...
- Android Volley
1.volley简单的介绍: Volley是一个HTTP库,使Android应用程序变得更加容易,最重要的是,网络 得更快. Vollry 提供以下好处: 1.自动调度的网络请求. 2.多个并发的网络 ...
- volley用法之 以post方式发送 json 参数
需求是这样 我们需要发送一个post请求向服务器要参数.要求是发送的post参数也要是json格式. 简单一点的是这样的: 如果要发送的是这样简单的json格式,我们可以简单的使用map来实现: Re ...
- Volley框架使用笔记
1.初始化请求队列 RequestQueue RequestQueue queue= Volley.newRequestQueue(context); 2.StringRequest 网络请求 Get ...
- android之volley学习
Volley是android的平台通信库,一个新的网络通信框架.Volley 的特点:适合数据量小,通信频繁的网络操作. 获取Volley git 工具使用:git clone https://and ...
- Android开发学习之路-Volley源码解析
从简单的StringRequest入手看看Volley的工作机制. 先简单说下Volley的用法: ① 获取一个RequestQueue mRequestQueue = Volley.newReque ...
- ym—— Android网络框架Volley(体验篇)
VolleyGoogle I/O 2013推出的网络通信库,在volley推出之前我们一般会选择比较成熟的第三方网络通信库,如: android-async-http retrofit okhttp ...
- Google开源库-Volley的使用
一.什么是Volley? Volley is an HTTP library that makes networking for Android apps easier and most import ...
- [Android]Volley源码分析(五)
前面几篇通过源码分析了Volley是怎样进行请求调度及请求是如何被实际执行的,这篇最后来看下请求结果是如何交付给请求者的(一般是Android的UI主线程). 类图:
- [Android]Volley源码分析(四)
上篇中有提到NetworkDispatcher是通过mNetwork(Network类型)来进行网络访问的,现在来看一下关于Network是如何进行网络访问的. Network部分的类图:
随机推荐
- On ROWNUM and Limiting Results
This issue's Ask Tom column is a little different from the typical column. I receive many questions ...
- MapReduce 1工作原理图文详解
MapReduce工作原理图文详解 一 MapReduce程序执行流程 程序执行流程图如下: 流程分析:1.在客户端启动一个作业.2.向JobTracker请求一个Job ID.3.将运行作业所需要的 ...
- HDFS 原理、架构与特性介绍
本文主要讲述 HDFS原理-架构.副本机制.HDFS负载均衡.机架感知.健壮性.文件删除恢复机制 1:当前HDFS架构详尽分析 HDFS架构 •NameNode •DataNode •Senc ...
- VS重置命令:devenv.exe/resetuserdata
VS命令行下执行下面的命令: devenv.exe/resetuserdata
- c#生成试卷。。。
.net下,操作Word的插件有NPOI,Spire,一版大家经常用的是NPOI,我在着手开发的时候,优先考虑的也是NPOI,然而时间比较着急,没有找到NPOI支持2003版本, 就放弃了,从网上发行 ...
- 安装DotNetCore.1.0.1-VS2015Tools.Preview2.0.3引发的血案
1.下载了一个开源项目,是用netcore开发的 2.VS2015打不开解决方案 3.于是安装DotNetCore.1.0.1-VS2015Tools.Preview2.0.3 4.安装成功,项目顺利 ...
- Flyweight Pattern
1.Flyweight 模式以共享的方式高效的支持大量的细粒度对象,对象分为内部状态.外部状态.将可以被共享的状态作为内部状态存储在对象中,而外部状态在适当的时候作为参数传递给对象. 当以下所有的条件 ...
- leetcode 790. Domino and Tromino Tiling
We have two types of tiles: a 2x1 domino shape, and an "L" tromino shape. These shapes may ...
- signal( SIGINT, SigIntHandler )
signal 的第1个参数signum表示要捕捉的信号,第2个参数是个函数指针,表示要对该信号进行捕捉的函数,该参数也可以是SIG_DEF(表示交由系统缺省处理,相当于白注册了)或SIG_IGN(表示 ...
- IC卡、ID卡、M1卡、射频卡的区别是什么
IC卡.ID卡.M1卡.射频卡都是我们常见的一种智能卡,但是很多的顾客还是不清楚IC卡.ID卡.M1卡.射频卡的区别是什么,下面我们一起来看看吧. 所谓的IC卡就是集成电路卡,是继磁卡之后出现的又一种 ...