为什么使用Volley

Android提供了两个HTTP库给开发者来进行实现一个HTTP请求,一个是AndroidHttpClient (从apache HttpClient拓展而来),另一个是HttpUrlConnection。两者都互有优缺点。当我们开发一个应用,一般来说,我们会写一些Http连接类,这些类可以处理所有Http请求,创建后台线程,管理线程池,解析response,缓存response,处理异常状态码、SSL连接,实现并行或者串行请求。每一个开发者都有自己的方式去实现这些方法。有些人可能会用AsycnTask在后台完成网络请求,有些人可能经过处理程序从UI线程创建HTTP连接类,然后在工作线程执行网络操作,再使用处理程序解析HTTP response返回主线程。

但是我们最终会重复编写相同的样板代码,我们试图在我们的应用程序重复造轮子。

例如,下面的代码片段,在AysncTask的doBackground 里实现一个HTTP请求。当我们获取response,把数据从HttpUrlConnection的输入流拷贝到输出流,然后把输出流再转化成我们最终想要的JsonObject。所有这些样板代码在我们的代码中重复出现。

  1. HttpURLConnection urlConnection = null;
  2. try {
  3. URL url = new URL("http://www.android.com/");
  4. urlConnection = (HttpURLConnection) url.openConnection();
  5. InputStream in = new BufferedInputStream(urlConnection.getInputStream());
  6. ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
  7. byte[] buffer = new byte[1024]; // Adjust if you want
  8. int bytesRead;
  9. while ((bytesRead = in.read(buffer)) != -1) {
  10. outputStream.write(buffer, 0, bytesRead);
  11. }
  12. JSONObject resultJSON = new JSONObject(outputStream.toString());
  13.  
  14. }catch (Exception e) {
  15. e.printStackTrace();
  16. } finally {
  17. urlConnection.disconnect();
  18. }

所以谷歌提出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. 兔子-svnserver,client搭建

    http://www.cnblogs.com/xiaobaihome/archive/2012/03/20/2407610.html

  2. 腾讯云centos,nginx安装

  3. cookie、session及实现记住密码,自动登录

    在登录帐号.密码框下,有三种帐号登录模式可供选择,用户可根据自己的具体情况选择其中一种适合自己的模式. 1.网吧模式:勾选网吧模式后,登录的帐号会在歪歪注销/退出的时候自动清除,不会留在登录框中,可以 ...

  4. Objectvice-C中的super

    /** 狗:哈士奇 */ //僵尸 #import <Foundation/Foundation.h> @interface Dog : NSObject - (void) walk; + ...

  5. [noip2014day1-T2]联合权值

    无向连通图 G 有 n 个点,n-1 条边.点从 1 到 n 依次编号,编号为 i 的点的权值为 Wi,每条边的长度均为 1.图上两点(u, v)的距离定义为 u 点到 v 点的最短距离.对于图 G ...

  6. FindBugs规则整理

    http://blog.csdn.net/jdsjlzx/article/details/21472253/ 配置FindBugs和常见FindBugs错误 http://blog.csdn.net/ ...

  7. YUV420数据和字符信息如何利用滤镜方法进行编码?

    YUV420数据和字符信息如何利用滤镜方法进行编码?我希望用ffmpeg中的filter方法,把YUV420数据和字符信息一起编码,该怎么办呢? 本人目前只实现了把yuv420的数据进行h.264的编 ...

  8. RTree算法Java实现 JSI RTree Library的调用实例 标签:jsi-rtree-library

    1. [代码]jsi-rtree-library /** *  */package com.mycompany.project; //package net.sourceforge.jsi.examp ...

  9. js事件传播的一个疑惑

    在学习事件传播的时候,发现一个问题,当时是这样子的. 我给多层元素分别绑定了冒泡和捕获事件.按道理应该先从外向内执行完所有的捕获事件,再由内向外执行所有的冒泡事件. 但是天不随人愿啊,有个元素偏偏先执 ...

  10. RequireJS 加载 js 执行顺序

    初次接触RequireJS 对文档理解不很透彻,自己通过测试测到的执行顺序: 文档结构: |-amaze | -js | -amazeui.js | -jquery.min.js | -main.js ...