关于 User Agent 通过代码我们发现如果是使用 AndroidHttpClient,Volley 还会将请求头中的 User-Agent 字段设置为 App 的 ${packageName}/...Volley 支持 8 种 Http 请求方式 GET, POST, PUT, DELETE, HEAD, OPTIONS, TRACE, PATCH Request 类中包含了请求 url,请求请求方式...以下两个方法也经常会被重写 public byte[] getBody() 重写此方法,可以构建用于 POST、PUT、PATCH 请求方式的 Body 内容。...我个人认为的不足之处 缓存的再验证方面,在构建If-Modified-Since请求首部时,Volley 使用了服务端响应的Date首部,没有使用Last-Modified首部。...BasicNetwork.performRequest(…) 如下代码: @Override public NetworkResponse performRequest(Request<?
StringRequest的用法 前面已经说过,Volley的用法非常简单,那么我们就从最基本的HTTP通信开始学习吧,即发起一条HTTP请求,然后接收HTTP响应。...这样的话,一个最基本的HTTP发送与响应的功能就完成了。你会发现根本还没写几行代码就轻易实现了这个功能,主要就是进行了以下三步操作: 1. 创建一个RequestQueue对象。 2....很遗憾,StringRequest中并没有提供设置POST参数的方法,但是当发出POST请求的时候,Volley会尝试调用StringRequest的父类——Request中的getParams()方法来获取...POST参数,那么解决方法自然也就有了,我们只需要在StringRequest的匿名类中重写getParams()方法,在这里设置POST参数就可以了,代码如下所示: StringRequest stringRequest...连个设置POST参数的方法都没有。但是不要忘记,Volley是开源的,只要你愿意,你可以自由地在里面添加和修改任何的方法,轻松就能定制出一个属于你自己的Volley版本。 4.
转眼间博客竟然这么久没更新了,罪过罪过…这两天在用Volley框架,但是当我使用JsonObjectRequest发送Post请求时,竟然失效了。...服务器一直响应失败,搞了半天,在StackOverFlow上找到了类似的问题,终于解决掉了。...求真之路 原始代码展示 RequestQueue mqueue = Volley.newRequestQueue(this); JsonObjectRequest jsObjRequest =...POST请求时,样例如下: RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext()); HashMap代码的问题。 我的第二个方案代码是Volley官方资料上的使用方法,按理说不应该有问题。那么既然客户端这边没有问题,只能是服务器端的事了。
GET请求的使用实例 从最基本的HTTP通信开始学习吧,即发起一条HTTP请求,然后接收HTTP响应。...HTTP的请求类型通常有两种,GET和POST,先来学习GET: 首先需要获取到一个RequestQueue对象,可以调用如下方法获取到: RequestQueue mQueue = Volley.newRequestQueue...mQueue.add(stringRequest); 现在运行程序就可以接受到服务器返回的response打印,通过浏览器解析可以生成一个网页 这样的话,一个最基本的HTTP发送与响应的功能就完成了。...很遗憾,StringRequest中并没有提供设置POST参数的方法,但是当发出POST请求的时候,Volley会尝试调用StringRequest的父类——Request中的getParams()方法来获取...POST参数,那么解决方法自然也就有了,我们只需要在StringRequest的匿名类中重写getParams()方法,在这里设置POST参数就可以了,代码如下所示: StringRequest stringRequest
Volley也有缺陷,比如不支持post大数据,所以不适合上传文件。不过Volley设计的初衷本身也就是为频繁的、数据量小的网络请求而生!...个人建议: 如果请求的数据比较小的话,建议用volley,因为它代码量小,效果高,但是如果是下载大型文件(视频),那就不要用它了。...GET/POST url地址 响应监听 错误监听 String url = "http://www.baidu.com"; StringRequest request = new StringRequest...总结: Volley是轻量级的网络请求框架,如果请求的数据比较小的话,建议用volley,因为它代码量小,效果高,但是如果是下载大型文件(视频),那就不要用它了。...每一个框架都是一些人的心血,肯定是优点爆棚的,对于程序员来讲一个好的工具对以后的开发是多么的重要,一个功能省去了一些代码,功能多了代码就非诚客观了,而且简介明了规范。谢谢大家的支持。
Volley 允许我们使用自定义的 HttpStack ,从这也可以看出 Volley 具有很强的扩展性。 RequestQueue 接下来继续跟踪 RequestQueue 构造方法的代码。...waitingRequests); } } } } 那么看到这里我们意识到有必要看一下 CacheDispatcher 和 NetworkDispatcher 的代码...那么在这里就贡献一张 CacheDispatcher 类的流程图: CacheDispatcher 类的流程图 NetworkDispatcher 然后是 NetworkDispatcher 的代码:...> request, VolleyError error) { request.addMarker("post-error"); Response响应流程走完了。 HttpStack 现在回过头来看看 Volley 框架中是如何发起网络请求的。
经过前三篇文章的学习,Volley的用法我们已经掌握的差不多了,但是对于Volley的工作原理,恐怕有很多朋友还不是很清楚。...因此,本篇文章中我们就来一起阅读一下Volley的源码,将它的工作流程整体地梳理一遍。同时,这也是Volley系列的最后一篇文章了。...这就要回顾一下Volley的用法了,还记得吗,使用Volley的第一步,首先要调用Volley.newRequestQueue(context)方法来获取一个RequestQueue对象,那么我们自然要从这个方法开始看起了...没错,这个就是我们在自定义Request时需要重写的另外一个方法,每一条网络请求的响应都是回调到这个方法中,最后我们再在这个方法中将响应的数据回调到Response.Listener的onResponse...好了,到此为止我们就把Volley的用法和源码全部学习完了,相信你已经对Volley非常熟悉并可以将它应用到实际项目当中了,那么Volley完全解析系列的文章到此结束,感谢大家有耐心看到最后。
1.4 代码示例 以下是一个简单的Volley示例,用于发送GET请求并处理响应: import com.android.volley.Request; import com.android.volley.RequestQueue...3.4 代码示例 以下是一个简单的OkHttp示例,用于发送GET请求并处理响应: import java.io.IOException; import okhttp3.Call; import okhttp3...支持基本的HTTP请求:可以处理常见的HTTP请求如GET、POST、PUT、DELETE等。 手动处理流:需要开发者手动管理连接、读取、写入数据和关闭流。...4.3 缺点 使用复杂:相比于如Retrofit这样的库,HttpURLConnection需要更多的代码来处理HTTP请求和响应。...4.5 示例代码 以下是使用HttpURLConnection发送GET请求的简单示例: import java.io.BufferedReader; import java.io.IOException
关于 HTTP 请求报文和响应报文的格式这里就不再过多介绍了,简单说,HTTP 协议是以 ASCII 码传输,建立在 TCP/IP 协议之上的应用层规范。...其中 Volley 框架就是默认使用的这种编码方式。...其实不仅仅是 Volley 框架,一般的网络请求如果没有特别设置的话都是采用了这种编码方式,采用这种编码方式的 HTTP 请求报文是这样的(这里只是简单的写了一下) POST /xxx/xxx HTTP...其中 Volley 请求框架就没有封装这种编码方式的请求体,这也就说明了,为什么官方介绍 Volley 的时候说明,Volley 不支持 post 大数据,不适合上传文件了。...其中这种请求方式,Volley 为我们提供了 JsonObjectRequest 来实现。看看源码就知道了。很简单 这就是三种最常见的,也是我们需要掌握的 POST 请求方式。
代码不复杂,但是算是一个输入体验的小细节: //监听EditText的变化,使用handler延迟400毫秒后对搜索逻辑进行发起 onTextChanged(...) { mTextChangeNum...以网络请求服务器搜索结果为例,从ui一致性的角度——搜索结果应该是用户最后输入的关键字对应的结果: 所以只有最好的网络请求需要更新数据和ui,因为总是需要对最新的搜索进行响应,异步搜索的方案就是——每次新的请求发出...Volley中的网络请求抽象为两种状态:pending和flying。所以上一个搜索请求可能还未实际被发出,或者是在等待服务器响应中。无论哪种情况——旧的请求是一定被取消掉的。...类似Volley这样的网络框架提供了很好的api去取消已发出的网络请求——这样其结束处理也就自然消失了。...其它情况下,自己通过一个主线程上标志的集合来维护各个异步请求的 “丢弃状态” ,这样,即使请求刚好返回了,那么继续回到ui部分的 “结束代码” 就可以根据状态来立即停止。
使用最简单,代码最少,解耦更加彻底,易与其他框架联用。...最简单的使用,更多具体的应用可以参考Volley使用 Volley流程分析 通过上面volley的简单使用,逐步跟踪分析Volley网络访问的流程。...请求队列的创建 volley的使用首先通过Volley类创建一个请求队列RequestQueue RequestQueue queue = Volley.newRequestQueue(getApplicationContext...【扩展】关于 User Agent 通过代码我们发现如果是使用 AndroidHttpClient,Volley 还会将请求头中的 User-Agent 字段设置为 App 的 packageName/...首先缓存时间过期并不意味着这个资源就真的过期了,这个资源在服务器上可能一直就没有发生变化,所以当缓存时间到了之后,需要发送一个验证请求来判断资源是否发生变化, 如果没有发生变化就返回304代码,这时候服务器返回一个新的响应头这里面包括新的过期时间
1.4 代码示例 以下是一个简单的Volley示例,用于发送GET请求并处理响应: import com.android.volley.Request; import com.android.volley.RequestQueue...3.4 代码示例 以下是一个简单的OkHttp示例,用于发送GET请求并处理响应: import java.io.IOException; import okhttp3.Call; import okhttp3...支持基本的HTTP请求:可以处理常见的HTTP请求如GET、POST、PUT、DELETE等。 手动处理流:需要开发者手动管理连接、读取、写入数据和关闭流。...4.3 缺点 使用复杂:相比于如Retrofit这样的库,HttpURLConnection需要更多的代码来处理HTTP请求和响应。...6.4 代码示例 以下的示例演示如何使用 libcurl 发送 GET 请求。
最常出现的错误代码: 200(成功) 服务器已成功处理了请求。通常,这表示服务器提供了请求的网页。 400(错误请求) 服务器不理解请求的语法。 404(未找到) 服务器找不到请求的网页。...HTTP协议错误代码一览表: 1xx(临时响应) 用于表示临时响应并需要请求者执行操作才能继续的状态代码。 代码 说明 100(继续) 请求者应当继续提出请求。...302(临时移动) 服务器目前正从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。此代码与响应 GET 和 HEAD 请求的 301 代码类似,会自动将请求者转到不同的位置。...此代码与响应 GET 和 HEAD 请求的 301 代码类似,会自动将请求者转到不同的位置。...4xx(请求错误) 这些状态代码表示,请求可能出错,已妨碍了服务器对请求的处理。 代码 说明 400(错误请求) 服务器不理解请求的语法。 401(未授权) 请求要求进行身份验证。
前言 封装了这么多组件,一步步走过来,我已经有了自己一定习惯下的封装思路了,可能代码写得并不是很好,设计得不是很合理,内部职责划分不是很明确。 但,我热衷的封装思想是:一条调用链使用。...我喜欢借助 AndroidStudio 的代码提示功能,结合调用链的使用方式,将组件的使用划分成多个步骤,控制每个步骤的 api,让其他人使用的时候,最好可以达到不看文档,不看源码,只需要了解入口,之后都可以通过...AndroidStudio 的代码提示来一步步引导使用的目的。...Volley_url.png 目前组件只支持三个功能: post() post 方式访问网络接口 get() get 方式访问网络接口 asImageFile() 下载网络中的图片文件到本地指定目录,因为...Volley_get.png post 方法支持的 api 跟 get 一样,也就是设置下 tag(用于取消该请求),设置下请求参数,请求头,然后调用 enqueue(),内部会根据队列情况自动发起请求
前言 花了好几天,重新研究了 Volley 的源码实现,比起之前又有了一番新的体会,啃源码真的是一件让人纠结的事情,阅读优秀的源码,特别是难度相对较大的源码,一旦陷入代码细节或者情绪一烦躁,很容易让人奔溃...从优秀的代码中学习优秀的编程思想以及良好的代码设计和代码风格是一个非常好的方法,这次通读了 Volley 的源码之后,对于 Volley 的代码质量和拓展性深感佩服,为了更好的记录这次的源码研究之旅,写几篇博客记录一下...,我在关键的地方已经打上注释了,在这里总结一下,可以看到在初始化了 Cache 之后,有一个 while(true) 循环,说明缓存线程是始终执行的,接着会在缓存中取出响应结果,如果为 null 的话,...mCache.put(request.getCacheKey(), response.cacheEntry); } // 分发响应结果...> response, Runnable runnable) { request.markDelivered(); request.addMarker("post-response
什么是Volley Google I/O 2013上,Volley发布了。Volley是Android平台上的网络通信库,能使网络通信更快,更简单,更健壮。...4.将请求添加到队列 演示代码 HTTP GET 演示: public class SimpleGetActivity extends Activity { RequestQueue mRequestQueue...Toast.makeText(getBaseContext(), volleyError.getMessage(), 0).show(); } }; } HTTP POST...savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_paras_post...) { String url = Constants.URL_FOR_DEMO1; StringRequest req = new StringRequest(Method.POST
volley的设计目标就是非常适合数据量小,通信量大的客户端,而对于大数据量的网络操作,比如说下载文件等,Volley的表现就会非常糟糕。...如果在缓存中没有找到结果,则将这条请求加入到网络请求队列中,然后处理发送HTTP请求,解析响应结果,写入缓存,并回调主线程。...(包括重定向以及重试的⼀些中间请求和响应),并且看到的是完整原始数据,⽽不是没有加 Content-Length 的请求数据,或者 Body还没有被 gzip 解压的响应数据。...做异步、网络的数据处理,写出来的代码比较优雅。...的时候,根据post传入的参数,去找到匹配的方法,反射调用。
Volley 属于“开放源代码项目”。. Volley 提供了下列好处: 自动化的网络请求调度安排。 多并发的网络连接。 对标准HTTP 透明化的硬盘和内存 响应缓存。...它为你想要的特性提供内建的支持,Volley 将你从样板的代码中解放处理,使得你将注意力集中在你的业务细节。...Volley 不适合用于 大文件的下载 或者流操作,因为Volley在解析过程中会持有所有的响应内容在内存中。如果要大文件下载操作,考虑是使用其他替代,比如DownloadManager。...://android.googlesource.com/platform/frameworks/volley 导入下载的源代码到你的项目中,并且作为你的library项目 (如果你使用 Eclipse...请求队列负责管理工作线程来 启动网络操作,读取和写入到缓存,和解析响应。请求执行解析原始响应,Volley小心的分发解析的响应传送到主线程。
又比方说,目前正在用的数据存储方案是OrmLite,现在使用greenDao或者Realm会更好,在类似这些情况下,如何做到不修改Activity/Fragment/Presenter代码的情况下,把Volley...下面,我们就用Volley更换到OkHttp这个例子来说明一下如何做到不修改Activity/Fragment/Presenter的代码情况下,更快地更换业务逻辑实现的代码。 ...是因为它们具有相同的共性,它们所要解决的问题是相同的,比如说http请求框架,无论是Volley/OkHttp/Retrofix,它们所要实现的都是http请求中的get/post/put/delete...2) 使用OkHttp更换Volley 现在我们用OkHttp的请求方式也实现了一套get/post/put/delete的请求方法,此时只要修改Step3中,返回的对象为OkHttpRequestManager...对象,就已经完成了我们整个http请求框架的更换,此时,你可以完全移除Volley的引用以及代码,而不会对程序有任何影响。
领取专属 10元无门槛券
手把手带您无忧上云