首页
学习
活动
专区
圈层
工具
发布

volley请求原理

第二个方法中,如果 HttpStatck 参数为 null,则如果系统在 Gingerbread 及之后(即 API Level >= 9),采用基于 HttpURLConnection 的 HurlStack...${versionCode},如果异常则使用 "volley/0",不过这个获取 User-Agent 的操作应该放到 if else 内部更合适。...实际在请求发出之前,会检测 User-Agent 是否为空,如果不为空,则加上系统默认 User-Agent。...如果发生超时,认证失败等错误,进行重试操作,直到成功、抛出异常(不满足重试策略等)结束。 4.2.12 HttpStack.java 用于处理 Http 请求,返回请求结果的接口。...public synchronized byte[] getBuf(int len) 获取长度不小于 len 的 byte[],遍历缓存,找出第一个长度大于传入参数len的 byte[],并返回;如果最终没有合适的

2.7K60

Android Volley核心源码解析

Volley中的一些概念简介 Volley:Volley 对外暴露的 API,通过 newRequestQueue(…) 函数新建并启动一个请求队列RequestQueue。...RequestQueue:表示请求队列,里面包含一个CacheDispatcher(用于处理走缓存请求的调度线程)、NetworkDispatcher数组(用于处理走网络请求的调度线程,默认长度为4),...CacheDispatcher:一个线程,用于调度处理走缓存的请求。启动后会不断从缓存请求队列中取请求处理,队列为空则等待,请求处理结束则将结果传递给ResponseDelivery去执行后续处理。...启动后会不断从网络请求队列中取请求处理,队列为空则等待,请求处理结束则将结果传递给ResponseDelivery去执行后续处理,并判断结果是否要进行缓存。...Cache:缓存请求结果,Volley 默认使用的是基于 sdcard 的DiskBasedCache。

1.1K80
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Android Volley 源码解析(三),图片加载的实现

    Volley 源码解析(一),网络请求的执行流程。...指定图片的属性,Bitmap.Config 下的几个常量都可以使用,其中 ARGB_8888 可以展示最好的颜色属性,每个图片像素像素占 4 个字节,RGB_565 表示每个图片像素占 2 个字节 6、图片请求失败的回调...我们在 Android Volley 源码解析(一),网络请求的执行流程 这篇文章中讲到,网络请求最终会将从服务器返回的结果封装成 NetworkResponse 然后传给 Request 进行处理。...inSampliSize = 2 则代表将原先图片的宽和高分别减小为原来的 1/2,以此类推。...---- 相关文章 Android Volley 源码解析(一),网络请求的执行流程 Android Volley 源码解析(二),探究缓存机制

    1.1K20

    Android训练课程(Android Training) - 使用Volley传输网络数据(Transmitting Network Data Using Volley)

    构造一个标准请求(Making a Standard Request) 学习如何使用Volley的out-of-the-box请求类型(比如原始字符串,图片,JSON)发送一个请求。...下面是一个使用 字符串值作为标签 的示例: 1.定义你的标签并且添加到你的请求上。...写一个自定义请求(Write a Custom Request) 在工具盒中,有很多请求是可以 准备-即用 的;如果你的响应是一个字符串,图片,或者JSON,或许你不再需要去实现一个自定义请求。...如果你的解析后的响应是一个字符串,例如,创建你的自定义请求时要继承Request。...你的实现必须返回一个 Response, 它包含了你的类型化的(强类型的)响应对象和缓存元数据,或者在解析失败时的错误 如果你的协议中包含了非标准的语义,你可以构造一个你自己的 Cache.Entry

    2.7K00

    android 网络通信框架volly

    Volley提供的功能 简单来说,它提供了如下的便利功能: JSON,图像等的异步下载; 网络请求的排序(scheduling) 网络请求的优先级处理 缓存 多级别取消请求 和Activity...设置图片源 // imageView是一个ImageView实例 // ImageLoader.getImageListener的第二个参数是默认的图片resource id // 第三个参数是请求失败时候的资源...如果在一个Activity里面启动了网络请求,而在这个网络请求还没返回结果的时候,如果Activity被结束了,则我们需要写如下代码作为防守: @Override public void onPostExecute...Volley里所有的请求结果会返回给主进程,如果在主进程里取消了某些请求,则这些请求将不会被返回给主线程。...总之,如果你要编写网络程序,是不是可以考虑开始使用Volley呢?

    1.4K50

    OkHttp使用详解

    一、OkHttp介绍 OkHttp是一个优秀的网络请求框架,可能一说到网络请求框架,可能很多人都会想到volley,volley是一个Google提供的网络请求框架,我的博客里也有一篇专门介绍volley...的博客,博客地址在此**Android网络请求 ------ Volley的使用** 那么既然Google提供了网络请求的框架,我们为什么还要使用OkHttp呢,原来是volley是要依靠HttpCient...,并传入Get请求的地址 如果我们需要在get请求时传递参数,我们可以以下面的方式将参数拼接在url之后 https:www.baidu.com?...四、OkHttp进行Post请求提交字符串 如果你已经掌握了上面的两种基本的步骤,那下面的内容就比较简单了 上面我们的post的参数是通过构造一个FormBody通过键值对的方式来添加进去的,其实post...listener.onRequestProgress(byteWritten, contentLength()); } } /** * 返回文件总的字节大小 * 如果文件大小获取失败则返回

    12.2K40

    Android Volley完全解析(二),使用Volley加载网络图片

    第二个参数是图片请求成功的回调,这里我们把返回的Bitmap参数设置到ImageView中。...第五个参数用于指定图片的颜色属性,Bitmap.Config下的几个常量都可以在这里使用,其中ARGB_8888可以展示最好的颜色属性,每个图片像素占据4个字节的大小,而RGB_565则表示每个图片像素占据...第六个参数是图片请求失败的回调,这里我们当请求失败时在ImageView中显示一张默认图片。...最后将这个ImageRequest对象添加到RequestQueue里就可以了,如下所示: mQueue.add(imageRequest); 现在如果运行一下程序,并尝试发出这样一条网络请求,很快就能看到网络上的图片在...实际上,Volley在请求网络图片方面可以做到的还远远不止这些,而ImageLoader就是一个很好的例子。

    1.5K60

    Volley框架源码解析

    0001B 在 2013 年的 Google I/O 大会上,Volley 网络通信框架正式发布。Volley 框架被设计为适用于网络请求非常频繁但是数据量并不是特别大的情景,正如它的名字一样。...Volley 框架的使用方法非常简单,并且有多种 request 请求方式可以选择,使用方法都是和上面类似的。...Request; mWaitingRequests :主要作用是如果当前有一个 Request 正在请求并且是可以缓存的,那么 Volley 会去 mWaitingRequests 中根据该 cacheKey...至此,一个完整的网络请求及响应流程走完了。 HttpStack 现在回过头来看看 Volley 框架中是如何发起网络请求的。...另外,在源码中还有不少可以继续优化的地方,有兴趣的同学可以自定义一个属于自己的 Volley 。 好了,如果你对本文哪里有问题或者不懂的地方,欢迎留言一起交流。

    2.3K30

    笔记12 | 复习Volley(一)基本概念和用法

    一样轻松加载网络上的图片 缺点:通信频繁的网络操作,对于大数据量的网络操作,比如说下载文件等,Volley的表现就会非常糟糕。...HTTP的请求类型通常有两种,GET和POST,先来学习GET: 首先需要获取到一个RequestQueue对象,可以调用如下方法获取到: RequestQueue mQueue = Volley.newRequestQueue...} }, new Response.ErrorListener() { //服务器响应失败的回调...很遗憾,StringRequest中并没有提供设置POST参数的方法,但是当发出POST请求的时候,Volley会尝试调用StringRequest的父类——Request中的getParams()方法来获取...至于它们的用法也基本上没有什么特殊之处,先new出一个JsonObjectRequest对象,如下所示: // 获取json字符串 public void getJSONVolley() {

    1.2K40

    Android Volley完全解析(一),初识Volley的基本用法

    不过HttpURLConnection和HttpClient的用法还是稍微有些复杂的,如果不进行适当封装的话,很容易就会写出不少重复代码。...下载Volley 介绍了这么多理论的东西,下面我们就准备开始进行实战了,首先需要将Volley的jar包准备好,如果你的电脑上装有Git,可以使用如下命令下载Volley的源码: git clone https...StringRequest的用法 前面已经说过,Volley的用法非常简单,那么我们就从最基本的HTTP通信开始学习吧,即发起一条HTTP请求,然后接收HTTP响应。...其中,目标服务器地址我们填写的是百度的首页,然后在响应成功的回调里打印出服务器返回的内容,在响应失败的回调里打印出失败的详细信息。...不过大家都知道,HTTP的请求类型通常有两种,GET和POST,刚才我们使用的明显是一个GET请求,那么如果想要发出一条POST请求应该怎么做呢?

    2.4K50

    Volley源码分析学习

    字符串 2)根据SDK版本来创建HttpStack的实现,如果是2.3以上的,则使用基于HttpUrlConnection实现的HurlStack,反之,则利用HttpClient实现的HttpClientStack...versionCode,如果异常则使用 "volley/0" 对于 HttpURLConnection, 通过数据抓包会发现,HttpURLConnection 默认是有 User-Agent 的,类似...判断如果请求已经取消了,则finish这次请求。 调用BasicNetwork实现类执行访问网络操作,获取网络返回的数据。...判断如果获取的网络数据没有被修改并且请求结果已经分发过,则结束这次请求,进行下一次的轮询。 解析从网络取得的数据,如果请求的数据需要缓存,则写到缓存中。 响应调度器分发结果 ?...BasicNetwork实现了重试的机制,如果第一次从网络获取失败,默认会重新再尝试一次,如果失败,则会将Error返回,默认的实现类是DefaultRetryPolicy类。

    2.3K60

    Volley请求

    不过HttpURLConnection和HttpClient的用法还是稍微有些复杂的,如果不进行适当封装的话,很容易就会写出不少重复代码。...下载Volley 介绍了这么多理论的东西,下面我们就准备开始进行实战了,首先需要将Volley的jar包准备好,如果你的电脑上装有Git,可以使用如下命令下载Volley的源码: git clone...StringRequest的用法 前面已经说过,Volley的用法非常简单,那么我们就从最基本的HTTP通信开始学习吧,即发起一条HTTP请求,然后接收HTTP响应。...其中,目标服务器地址我们填写的是百度的首页,然后在响应成功的回调里打印出服务器返回的内容,在响应失败的回调里打印出失败的详细信息。...不过大家都知道,HTTP的请求类型通常有两种,GET和POST,刚才我们使用的明显是一个GET请求,那么如果想要发出一条POST请求应该怎么做呢?

    2.2K70

    Android框架之Volley与Glide

    Volley是Google官方出的一套小而巧的异步请求库,该框架封装的扩展性很强,支持OkHttp,Volley里面也封装了ImageLoader,自身作为图片加载框架,不过这块功能没有一些专门的图片加载框架强大...Volley也有缺陷,比如不支持post大数据,所以不适合上传文件。不过Volley设计的初衷本身也就是为频繁的、数据量小的网络请求而生!...个人建议: 如果请求的数据比较小的话,建议用volley,因为它代码量小,效果高,但是如果是下载大型文件(视频),那就不要用它了。...好了,数据是出来了,我没有截图,大家了解,这什么都不传是简单,但如果想传值呢,那就POST方法呗。 2:POST带参数请求 在创建StringRequest方法前,我们先看一下源码方法,4个参数。...总结: Volley是轻量级的网络请求框架,如果请求的数据比较小的话,建议用volley,因为它代码量小,效果高,但是如果是下载大型文件(视频),那就不要用它了。

    1.5K60

    Android网络编程(三)Volley用法全解析

    ,Volley是必须要讲的知识点,所以我这里有必要再次介绍一下Volley的使用。...1.Volley简介 在2013年Google I/O大会上推出了一个新的网络通信框架Volley。...在使用Volley前请下载Volley库并放在libs目录下并add到工程中。...下载Volley请点击这 2.Volley网络请求队列 Volley请求网络都是基于请求队列的,开发者只要把请求放在请求队列中就可以了,请求队列会依次进行请求,一般情况下,一个应用程序如果网络请求没有特别频繁则完全可以只有一个请求队列...(对应Application),如果非常多或其他情况,则可以是一个Activity对应一个网络请求队列,这就要看具体情况了,首先创建队列: RequestQueue mQueue = Volley.newRequestQueue

    78170

    Android网络库:Volley、Retrofit、OkHttp和HttpURLConnection的比较与应用

    Volley 的源码中,可以看到如下特性: Request 类包含一个 priority 属性,用于表示请求的优先级。Volley 会根据优先级对请求进行排序和调度。...1.1 优点 易于使用:Volley提供了简洁的API,使得开发者可以轻松实现网络请求。 请求优先级处理:Volley可以根据请求的优先级自动进行调度,优先满足高优先级请求。...1.2 缺点 不支持大文件下载:Volley适用于小文件和文本数据的传输,但不适合处理大文件下载。 不支持同步请求:Volley的请求默认是异步的,不支持同步请求。...开发者可以实现 onResponse 和 onFailure 方法来处理成功和失败的情况。 Retrofit 支持多种数据解析方式,如 Gson、Moshi 等。...足够轻量:如果你的应用只需要基本的HTTP通信,使用HttpURLConnection可能会让应用保持较小的体积。

    1.5K10

    Android常用库源码解析

    如果您的服务器配置了多个IP地址,当第一个IP连接失败的时候,OkHttp会自动尝试下一个IP。OkHttp还处理了代理服务器问题和SSL握手失败问题。...因此我最终替换为了OkHttp volley原理 主线程中调用RequestQueue的add()方法来添加一条网络请求,这条请求会先被加入到缓存队列当中,如果发现可以找到相应的缓存结果就直接读取缓存并解析...如果在缓存中没有找到结果,则将这条请求加入到网络请求队列中,然后处理发送HTTP请求,解析响应结果,写入缓存,并回调主线程。...为什么说Volley适合数据量小,通信频繁的网络操作 volley中为了提高请求处理的速度,采用了ByteArrayPool进行内存中的数据存储的,如果下载大量的数据,这个存储空间就会溢出,所以不适合大量的数据...在这⾥,OkHttp 会创建出⽹络请求所需要的 TCP 连接(如果是 HTTP),或者是建⽴在 TCP 连接之上的 TLS 连接(如果是 HTTPS),并且会创建出对应的 HttpCodec 对象(⽤于编码解码

    1.4K10

    基于开源项目搭建属于自己的技术堆栈

    4.1 gson gosn 是 Google 出品的 JSON 解析函数库,可以将 JSON 字符串反序列化对应的 Java 对象,或者反过来将 Java 对象序列化为对应的 JSON 字符串,免去了开发者手动通过...如果你的 HTTP 服务有多个 IP 地址,OkHttp 在第一次连接失败是,会尝试其他可选的地址。这对于 IPv4+IPv6 以及托管在冗余数据中心的服务来说是必要的。...OkHttp 使用现代的 TLS 特性(SNI,ALPN)初始化 HTTP 连接,当握手失败时,会降低使用 TSL1.0 初始化连接。...官网配出一张弓箭发射图来说明 Volley 特别使用于数据量小等通信频繁的场景。 具体的将,Volley 是为了简化网络任务而设计的,用于帮助开发者处理请求、加载、缓存、多线程、同步等任务。...Volley 官方源码托管在 Google Source 上面,使用时只能直接以 Jar 包形式引入,如果想在 Gradle 中使用 compile 在线引入,可以考虑使用 mcxiaoke 在 Github

    2.3K70
    领券