初步使用Volley-了解Volley基本用法

就在刚才恰恰初步看完了Volley源码,最主要的体会有两个:

1.必须了解Http协议,或者说必须熟悉如何构造Http请求和如何解析Http响应。

2.必须熟悉Cache的基本原理,并结合Http响应来分析如何进行Cache的最佳应用。

3.熟悉各种Queue和List,Map等的基本操作,了解线程同步和互斥锁。

4.最好用几张纸来记录主要的类的结构,以便分析关联性。

下面就是推荐如何看源码了。对于这个不熟悉的项目结构,我看到这样的目录结构:

因此我首先选择从外部查看,先看接口类,因为接口一般是比较简单的,而且一般都能了解某些接口的基本功能,比如:

Cache接口,这个接口就定义了一些主要的管理缓存的的属性和一个Entry类来管理请求/响应缓存的相关数据,这个通过后来的了解我知道可能是用来判断本地缓存是否过期的(这里插一句,任何直接读取本地数据都比从网络上获取数据快,做出这个假设能帮助我很好的理解Cache,虽然不一定对)。

按照这个思路,我又看了一个Network接口:

这个Network接口虽然简单到只有一个方法,但是涉及到了三种在Volley中定义的类,按照原则,我首先查看了参数中那个Request类的定义,这样就揭开了第一个复杂类的学习,抽象Request类,这个是所有请求的基类,我们将来如果有需要自定义的请求格式可以从这里来继承定义,比如后来在toolbox中看到的三种基本数据的请求方式,Image/Json/String。下面我就说一下这三种请求的用法,有涉及的类我会简略带过,需要学习的请自行研究Volley源码。

1.

首先是最基本的StringRequest,请求的是一段字符串资源:

这里面可以看到,有一个RequestQueue被使用了,这个队列是用来调度一应Request的一个处理队列,其中包含了一系列的调度工具和一系列的优化方法,这也是除了Request之外的我第二个看到的复杂类结构,在这个类中有一系列的其他类出现,比如缓存调度,网络调度,几个等待和处理的队列等等,我总结了一个简单的图,不论对错,是个参考:

,回到正题,我们看一下结果:

这就是构造的最简单的一个fetch字符串的方法。

2.获取JSON数据。

对于JSON类型的数据有两个相关的请求类,一个针对JsonObject,另一个针对JsonArray,从Request继承后将泛型参数分别定成了JsonObject和JsonArray。

对于JsonObject和JsonArray其实界线并非相当明显,一般数据都是JsonObject的,当然视情况而定,先测试的是JsonObject的:

结果:

由于实在不太好找jsonarray的数据,所以在这里就没有办法演示,只能上段代码,可以看出JSONArray的请求可以比较简单构造:

3.最后是图片ImageRequest请求的介绍,由于某些原因,图片请求类没有仔细看,但是大略看了一下发现无非也就是自适应缩放等内容,有一个名叫Picasso的图片库可能更好,等过段时间我再看看它的源码再做详细讨论:

刚才在Volley中使用Image请求的结果是:

Ok,大体上就是这样,我坚信,最简单的就是最好的,当然,这个简单可能有多种意思。

下一篇我可能会结合Http协议的一些知识来介绍Volley中对于Request和Response的封装,前提是我看完RFC不会懵住。

时间: 2024-11-05 21:18:23

初步使用Volley-了解Volley基本用法的相关文章

很急!!! java.lang.NoClassDefFoundError: com.android.volley.toolbox.Volley

============问题描述============ 日志文件如下,不知道是什么原因报如下错误 08-01 16:33:35.001: E/AndroidRuntime(31240): FATAL EXCEPTION: main 08-01 16:33:35.001: E/AndroidRuntime(31240): Process: cn.phonecms.main, PID: 31240 08-01 16:33:35.001: E/AndroidRuntime(31240): java.

异常:java.lang.NoClassDefFoundError: com.android.volley.toolbox.Volley

原因:http://m.blog.csdn.net/blog/Melody8869/46908891 java.lang.NoClassDefFoundError: com.android.volley.toolbox.Volley导致这种异常有以下几种原因: 1.adt版本问题,更新adt版本 2.jar包问题,其原因也是adt引起,只需删除libs下下的无用jar(我的v4包问题,delete) 或者: 没有将需要导入的包复制到项目的libs文件夹中.

android网络开源框架volley(五)——volley的一些细节

最近又把volley拿出来整理了下.之前没有遇到过的一些小问题又来了,在此记录下: 1.HttpUrlConnection DELETE 方式无法添加body的问题:java.net.ProtocolException: DELETE does not support writing 这个可以算是一个系统级的bug,为什么这么说,请看这里,这个问题在java8中才得以解决.没办法直接过去,咱就绕过去.查看HttpUrlConnection,我们发现他是一个抽象类,因此可以试试能不能通过它的其他实

封装Volley使Volley的每个请求都自动保存和发送Cookie

思路很简单,每次请求获取到服务器返回的response就解析头部获取cookie并保存,发送请求的时候就从本地读取cookie添加到头部发送给服务器 第一步,解析http response头部的cookie并保存,自定义一个Request并重写其parseNetworkResponse方法 /** * 解析数据,保存Cookie * @param response * @return */ @Override protected Response<JSONObject> parseNetwor

Android Volley入门到精通:初识Volley的基本用法

1. Volley简介 我们平时在开发Android应用的时候不可避免地都需要用到网络技术,而多数情况下应用程序都会使用HTTP协议来发送和接收网络数据.Android系统中主要提供了两种方式来进行HTTP通信,HttpURLConnection和HttpClient,几乎在任何项目的代码中我们都能看到这两个类的身影,使用率非常高. 不过HttpURLConnection和HttpClient的用法还是稍微有些复杂的,如果不进行适当封装的话,很容易就会写出不少重复代码.于是乎,一些Android

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

1. Volley简介 我们平时在开发Android应用的时候不可避免地都需要用到网络技术,而多数情况下应用程序都会使用HTTP协议来发送和接收网络数据.Android 系统中主要提供了两种方式来进行HTTP通信,HttpURLConnection和HttpClient,几乎在任何项目的代码中我们都能看到这两个类 的身影,使用率非常高. 不过HttpURLConnection和HttpClient的用法还是稍微有些复杂的,如果不进行适当封装的话,很容易就会写出不少重复代码.于是 乎,一些Andr

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

目录(?)[-] Volley简介 下载Volley StringRequest的用法 JsonRequest的用法 转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/17482095 1. Volley简介 我们平时在开发Android应用的时候不可避免地都需要用到网络技术,而多数情况下应用程序都会使用HTTP协议来发送和接收网络数据.Android系统中主要提供了两种方式来进行HTTP通信,HttpURLConnection和H

Volley的基本用法

1. Volley简介 我们平时在开发Android应用的时候不可避免地都需要用到网络技术,而多数情况下应用程序都会使用HTTP协议来发送和接收网络数据.Android系统中主要提供了两种方式来进行HTTP通信,HttpURLConnection和HttpClient,几乎在任何项目的代码中我们都能看到这两个类的身影,使用率非常高. 不过HttpURLConnection和HttpClient的用法还是稍微有些复杂的,如果不进行适当封装的话,很容易就会写出不少重复代码.于是乎,一些Android

小记:对Android网络下载工具的初步封装!(包括json,字符串下载(volley),和图片下载(glide))

import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.widget.ImageView; import com.android.volley.RequestQueue; import com.android.volley.Response; import com.android.volley.VolleyError