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(一),布布扣,bubuko.com

时间: 2024-10-05 04:27:54

Volley(一)的相关文章

Volley使用

Volley 简单使用示例 1.添加网络访问权限 <uses-permission android:name="android.permission.INTERNET" /> 2.创建一个RequestQueue对象.RequestQueue是一个请求队列对象,它可以缓存所有的HTTP请求,然后按照一定的算法并发地发出这些请求.RequestQueue内部的设计就是非常合适高并发的,因此我们不必为每一次HTTP请求都创建一个RequestQueue对象,这是非常浪费资源的,

Android热门网络框架Volley详解

.Volley简介 volley的英文意思为‘群发’.‘迸发’.Volley是2013年谷歌官方发布的一款Android平台上的网络通信库.Volley非常适合一些数据量不大,但需要频繁通信的网络操作.使用Volley进行网络开发可以使我们的开发效率得到很大的提升,而且性能的稳定性也比较高.但是Volley不适用于文件的上传下载操作. Volley的特点: >1 使网络通信更快,更简单,更健壮: >2 Get/Post网络请求及网络图像的高效率异步请求: >3 可以对网络请求的优先级进行

Volley随笔之文件缓存DiskBasedCache类

Volley提供了一个基于文件的缓存类DiskBasedCache保存缓存数据.这个类完成缓存工作的原理大致如此,首先声明一个文件夹,文件夹下的文件与cacheKey一一对应,也就是说每一个文件时不同网络请求的返回数据.文件的格式是这样,文件头是数据结构CacheHeader,描述了缓存的信息,之后就是缓存数据. 下面是DiskBasedCache的代码,不得不说很优美! /*  * Copyright (C) 2011 The Android Open Source Project * * L

Android Volley解析(一)之GET、POST请求篇

一. Volley 的地位 自2013年Google I/O 大会上,Google 推出 Volley 之后,一直到至今,由于其使用简单.代码轻量.通信速度快.并发量大等特点,倍受开发者们的青睐. 先看两张图,让图片告诉我们 Volley 的用处: 第一张 Volley 的经典图 通过上图,我们可以发现 Volley适合网络通信频繁操作,并能同时实现多个网络通信. 第二张图 我们在以前在 ListView 的 item 中如果有网络请求,一般都是通过Task 异步任务来完成,并在完成之后通知 A

优化ListView中的网络图片加载 及 Volley库源码分析

使用适当的开源库,如Volley或者Universal ImageLoader 以Volley库为例.Volley使用了线程池来作为基础结构,主要分为主线程,cache线程和network线程. 主线程和cache线程都只有一个,而NetworkDispatcher线程可以有多个,这样能解决比并行问题.如下图: 其中左下角是NetworkDispatcher线程,大致步骤是: 1.不断从请求队列中取出请求 request = mQueue.take(); 2.发起网络请求 NetworkResp

Volley框架源码浅析(一)

尊重原创http://blog.csdn.net/yuanzeyao/article/details/25837897 从今天开始,我打算为大家呈现关于Volley框架的源码分析的文章,Volley框架是Google在2013年发布的,主要用于实现频繁而且粒度比较细小的Http请求,在此之前Android中进行Http请求通常是使用HttpUrlConnection和HttpClient进行,但是使用起来非常麻烦,而且效率比较地下,我想谷歌正式基于此种原因发布了Volley框架,其实出了Voll

Android Volley 之自定义Request

可以在Ext.QuickTips.init();后加入如下代码: Ext.MessageBox.buttonText = { ok : "确定", cancel : "取消", yes : "是", no : "否" }; Android Volley 之自定义Request,码迷,mamicode.com

通过Volley加载包含大量图片的ListView

什么是Volley? 在这之前,我们在程序中需要和网络通信的时候,大体使用的东西莫过于AsyncTaskLoader,HttpURLConnection,AsyncTask,HTTPClient(Apache)等,2013年的GoogleI/O大会上,Volley发布了.Volley是Android平台上的网络通信库,能使网络通信更快,更简单,更健壮. 这是Volley名称的由来:a burst or emission of many things or a largeamount at onc

Android应用开发:网络工具——Volley(二)

引言 在Android应用开发:网络工具--Volley(一)中结合Cloudant服务介绍了Volley的一般使用方法.当中包括了两种请求类型StringRequest和JsonObjectRequest.一般的请求任务相信都能够通过他们完毕了,只是在千变万化的网络编程中,我们还是希望能够对请求类型.过程等步骤进行全然的把控.本文就从Volley源代码角度来分析一下.一个网络请求在Volley中是怎样运作的.也能够看作网络请求在Volley中的生命周期. 源头RequestQueue 在使用V

Google Volley框架之https请求

先插一句.Google出的volley框架本身是支持https请求的,可是仅仅是针对有第三方机构认证过的. 假设自己随便在网上搞的一个证书,那volley是不支持请求的. 本文讲下怎样让volley支持自己搞的https证书. 改动volley源代码:com.android.myvolley.toolbox.HurlStack /** * Create an {@link HttpURLConnection} for the specified {@code url}. */ protected