去年的Google I/O大会为android开发者带来了一个网络请求框架,它的名字叫做Volley。Volley诞生的使命就是让Android的网络请求更快,更健壮,而且它的网络通信的实现是基于HttpURLConnection的。前几天我整理了两个网络请求工具类,应付日常工作的开发需求还是没问题的,自己分别在HttpURLConnection和HttpClient的基础上进行进一层的封装,保证了API的足够简洁友好。有兴趣的同学可以回头去翻翻,源码在Github上,搜索AndroidHttpUtil即可找到。Volley基于jdk原生的网络请求类和BlockingQueue实现了它的网络请求的功能。下面为大家一一介绍下Volley为编程带来的实在好处。

准备步骤

  1. git clone https://android.googlesource.com/platform/frameworks/volley

  2. 导入项目,再export Jar包,推荐导出为带有源码的,便于查看源码

图片加载


同时Volley还为开发者提供了一个直接加载网络url的ImageView---NetworkImageView,使用起来更加的方便。

HTTP请求

Volley支持Http请求的所有八种方法,支持请求成功和失败的回调。还支持设置超时时间、失败后的重连次数、设置url缓存、以及为请求设置Tag,便于中断Request请求。请求成功的话,支持接收String、JsonObject和自定义bean,请求失败的话VolleyError有很多子类,也方便排查网络请求失败的原因。

GET请求的实现如图

如果需要添加请求参数的话,可以去复写Request中的getParams()方法,返回一个装有请求参数的Map集合就Ok了。同时如果中断请求线程也很简单,可以通过请求的引用直接cancel,也可以通过

RequestQueue.cancelAll(TAG_REQUEST)基于请求绑定的tag去中断。这样就避免了页面结束而仍有后台无用线程运行的现象了。Volley还支持网络请求的优先级、排序等。

写在最后:花了半天的时间研究Volley,发现它试用的两个场景。一是网络图片加载,二是网络请求返回json格式的数据。但是它的优势并不明显,其他第三方的图片加载框架和网络请求框架,无论都api的简洁易用方面看,还是扩展功能方面看都比它优秀。我推荐大家加载图片就使用Android-Universal-ImageLoader,网络请求的话,android-async-http,okHttp都是不错的选择。如果不想使用网络请求的框架,AndroidHttpUtil也是个很好选择或许是我没发现它的好,如果有朋友有啥异议,欢迎留言。

Volley demo地址https://github.com/smanikandan14/Volley-demo

AndroidHttpUtil源码地址https://github.com/JackCho/AndroidHttpUtil

如果觉得对你有所帮助,欢迎大家订阅我的微信公众账号——Android干货分享(ID:android_share)。下面是微信的二维码,为你提供及时高质的Android干货。技术交流QQ群:318588906,欢迎大家加群,共同探讨下Android和Java技术,一起壮大我们的微信干货分享社区。

网络请求框架---Volley的更多相关文章

  1. Android常用网络请求框架Volley Retrofit (okHttp)

    Android系统中主要提供了两种方式来进行HTTP通信,HttpURLConnection和HttpClient.在 Android 5.0 的时候 Google 就不推荐使用 HttpClient ...

  2. Volley网络请求框架的基本用法

    备注: 本笔记是参照了 http://blog.csdn.net/ysh06201418/article/details/46443235  学习之后写下的 简介:  Volley是google官网退 ...

  3. 安卓开发常用网络请求框架OkHttp、Volley、XUtils、Retrofit对比

    网络请求框架总结1.xutils     此框架庞大而周全,这个框架可以网络请求,同时可以图片加载,又可以数据存储,又可以 View 注解,使用这种框架很方便,这样会使得你整个项目对它依赖性太强,万一 ...

  4. 基于Retrofit+RxJava的Android分层网络请求框架

    目前已经有不少Android客户端在使用Retrofit+RxJava实现网络请求了,相比于xUtils,Volley等网络访问框架,其具有网络访问效率高(基于OkHttp).内存占用少.代码量小以及 ...

  5. XDroidRequest网络请求框架,新开源

    XDroidRequest 是一款网络请求框架,它的功能也许会适合你.这是本项目的第三版了,前两版由于扩展性问题一直不满意,思考来 思考去还是觉得Google的Volley的扩展性最强,于是借鉴了Vo ...

  6. Android网络请求框架

    本篇主要介绍一下Android中经常用到的网络请求框架: 客户端网络请求,就是客户端发起网络请求,经过网络框架的特殊处理,让后将请求发送的服务器,服务器根据 请求的参数,返回客户端需要的数据,经过网络 ...

  7. Android 网络请求框架android-async-http问题

    今天通过接口请求服务器的一些app数据,发现一个很奇怪的问题,请求一个链接的时候,通常在第一次请求发起的时候没有什么问题,能很快的拿到数据,但是 往后再去请求的时候就会等待很久,而且最后会请求失败,一 ...

  8. Android网络请求框架AsyncHttpClient实例详解(配合JSON解析调用接口)

    最近做项目要求使用到网络,想来想去选择了AsyncHttpClient框架开进行APP开发.在这里把我工作期间遇到的问题以及对AsyncHttpClient的使用经验做出相应总结,希望能对您的学习有所 ...

  9. App 组件化/模块化之路——如何封装网络请求框架

    App 组件化/模块化之路——如何封装网络请求框架 在 App 开发中网络请求是每个开发者必备的开发库,也出现了许多优秀开源的网络请求库.例如 okhttp retrofit android-asyn ...

随机推荐

  1. ARC-100 D - Equal Cut

    题面在这里! 我们枚举一下第2和第3段的分界点,显然这种情况下 第1与第2  和  第3与第4  之间的分界点都只有两种情况可能最优,吧这四种情况讨论一下就好了. 两边的分界点可以单调扫过去... # ...

  2. 【树形dp】Apple Tree

    [poj2486]Apple Tree Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10800   Accepted: 3 ...

  3. 【CCpp程序设计2017】推箱子游戏

    我的还……支持撤销!用链表实现! 题目:推箱子小游戏(基于console) 功能要求: 将p09迷宫游戏改造为“推箱子”游戏: 在地图中增加箱子.箱子目标位置等图形: 当玩家将所有箱子归位,则显示玩家 ...

  4. (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly Detection&Recommender Systems

    这部分内容来源于Andrew NG老师讲解的 machine learning课程,包括异常检测算法以及推荐系统设计.异常检测是一个非监督学习算法,用于发现系统中的异常数据.推荐系统在生活中也是随处可 ...

  5. 1.1(SQL学习笔记)SQL基础

    一.SELECT 建表及数据填充语句下载:链接: https://pan.baidu.com/s/1WHYafwqKJEKq1kDwCH_Zlg 提取码: 3wy4 SELECT用于指定检索返回的结果 ...

  6. Java学习笔记(16)

    需求:使用LinkedList存储一副扑克牌,然后实现洗牌功能 package cn.itcast.list; import java.util.LinkedList; import java.uti ...

  7. java中interface的完整表述

    我用一个工具:java Decompiler反编译工具查看jar包源码的时候,出现了以下代码: public abstract interface AbsITest{} 在网上搜索了一下: 我对这种情 ...

  8. 使用BusyBox制作linux根文件系统(CramFS+mdev)

    转:http://www.360doc.com/content/10/0428/11/496343_25245348.shtml 操作系统:Ubuntu9.04 内核版本:linux-2.6.24.7 ...

  9. iOS:quartz2D绘图 (动画)

    quartz2D可以用来绘制自己需要的图形,它们绘制出来的是一个静态的图形,那么如何绘制一个动态的图形呢?动态的图形就是动画,所谓动画,其实就是很多张图片在短时间内不停的切换所产生的一种视觉效果.qu ...

  10. C/C++ 宏定义中#、##、#@的区别

    #表示:对应变量字符串化 ##表示:把宏参数名与宏定义代码序列中的标识符连接在一起,形成一个新的标识符 连接符#@:它将单字符标记符变换为单字符,即加单引号.例如: #define B(x) #@x ...