为什么使用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(一)的更多相关文章

  1. 快速Android开发系列网络篇之Volley

    Volley是Google推出的一个网络请求库,已经被放到了Android源码中,地址在这里,先看使用方法 RequestQueue mRequestQueue = Volley.newRequest ...

  2. Android Volley

    1.volley简单的介绍: Volley是一个HTTP库,使Android应用程序变得更加容易,最重要的是,网络 得更快. Vollry 提供以下好处: 1.自动调度的网络请求. 2.多个并发的网络 ...

  3. volley用法之 以post方式发送 json 参数

    需求是这样 我们需要发送一个post请求向服务器要参数.要求是发送的post参数也要是json格式. 简单一点的是这样的: 如果要发送的是这样简单的json格式,我们可以简单的使用map来实现: Re ...

  4. Volley框架使用笔记

    1.初始化请求队列 RequestQueue RequestQueue queue= Volley.newRequestQueue(context); 2.StringRequest 网络请求 Get ...

  5. android之volley学习

    Volley是android的平台通信库,一个新的网络通信框架.Volley 的特点:适合数据量小,通信频繁的网络操作. 获取Volley git 工具使用:git clone https://and ...

  6. Android开发学习之路-Volley源码解析

    从简单的StringRequest入手看看Volley的工作机制. 先简单说下Volley的用法: ① 获取一个RequestQueue mRequestQueue = Volley.newReque ...

  7. ym—— Android网络框架Volley(体验篇)

    VolleyGoogle I/O 2013推出的网络通信库,在volley推出之前我们一般会选择比较成熟的第三方网络通信库,如: android-async-http retrofit okhttp ...

  8. Google开源库-Volley的使用

    一.什么是Volley? Volley is an HTTP library that makes networking for Android apps easier and most import ...

  9. [Android]Volley源码分析(五)

    前面几篇通过源码分析了Volley是怎样进行请求调度及请求是如何被实际执行的,这篇最后来看下请求结果是如何交付给请求者的(一般是Android的UI主线程). 类图:

  10. [Android]Volley源码分析(四)

    上篇中有提到NetworkDispatcher是通过mNetwork(Network类型)来进行网络访问的,现在来看一下关于Network是如何进行网络访问的. Network部分的类图:

随机推荐

  1. 【软件创意】智能Goals (android)

    智能Goals  软件创意核心思想:实现你的愿望. 功能概要:帮助记录奋斗了的历程.实现你的愿望.可以是跑步减肥,每天阅读,交际,存钱买房.满足各种记录需要,目标可以是完成多长时间,可以用计时器:可以 ...

  2. NS3网络仿真(11): ARP

    快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载,但请保留作者信息 ARP(Address ResolutionProtocol,地址解析协议)协议的基本功能就是通过 ...

  3. 【BZOJ1528】[POI2005]sam-Toy Cars 贪心

    [BZOJ1528][POI2005]sam-Toy Cars Description Jasio 是一个三岁的小男孩,他最喜欢玩玩具了,他有n 个不同的玩具,它们都被放在了很高的架子上所以Jasio ...

  4. jquery根据(遍历)html()的内容/根据子元素的内容(元素文本)来选择(查询),在子元素前加入元素

    <ul> <li>First</li> <li>second</li> <li>third</li> </ul ...

  5. File syncing and sharing software with file encryption and group sharing, emphasis on reliability and high performance.

    http://seafile.com/ showdoc haiwen/seafile: File syncing and sharing software with file encryption a ...

  6. Android笔记之dp与px之间的转换以及LayoutParams

    dp与px之间的转换公式 px = dp * (dpi / 160) dp = px / (dpi / 160) 其中dpi的获取方式如下 private void getDpi() { Displa ...

  7. PAT天梯赛 L2-027. 名人堂与代金券 【排序】

    题目链接 https://www.patest.cn/contests/gplt/L2-027 思路 在输入的时候 判断分数 是否符合领取代金券条件 如果符合 SUM 就加上对应的代金券价值 然后在对 ...

  8. Docker的远程访问

    $docker : info (10.211.55是另一台服务器的地址) 频繁访问远程的docker服务器使用-H选项很麻烦,使用环境变量DOCKER_HOST, $export DOCKER_HOS ...

  9. NYOJ-37 回文字符串 —— LCS变形

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=37 题解: 一开始想从两边向中间添加字符,发现这样不是最优的.因为加入字符之后,这些原本存 ...

  10. zabbix 优化之 表分区

    参考文献: http://www.th7.cn/db/mysql/201405/51681.shtml