volley学习笔记三

经过上两章的学习,我们对volley框架下的网络请求已经有了初步了解。这个系列文章是学习郭霖郭神的volley解析系列文章的学习笔记。意在帮助自己学习,把知识内容转成自己理解的东西描述出来。这里附上链接,有兴趣的读者,请参考郭神的原文,volley系列。这里是第三篇的学习,附上第三篇的链接Android Volley完全解析(三),定制自己的Request好了,让我们开始第三篇的学习。

经过之前的学习,我们掌握了volley各种Request的用法。包括StringRequest,JsonRequest,ImageRequest等。其中StreingReuest请求一条普通的文本数据,JsonRequest请求JSON格式数据(JsonObject和JsonArray)ImageRequest请求网络图片。

但是除此之外,若数据的格式是其他的形式,我们该如何处理呢?Volley提供了非常强的扩展机制,使得我们可以轻松的制出各种类型的Request。

自定义XMLRequest

自定义一个XMLRequest感觉无从下手,那就让我们参考一下StringRequest,看一下StringRequest的源码。

StringRequest的源码没有多少内容,主要就是提供了两种构造方法。需要注意的是,在构造函数中,一定要调用super方法将这几个参数传给父类,因为HTTP的请求和响应都是在父类中自动完成的。另外,由于Request类中的deliverResponse和parseNetworkResponse是两个抽象方法,因此子类StringRequest需要实现这两个方法。deliverResonse方法实现很简单,仅仅调用了mListener中的onResponse方法,并将response内容传入即可,这样就可以将服务器响应的数据进行回调了。parseNetworkResonse方法中则对服务器响应的数据进行解析。其中数据以字节的形式存放在NetworkResponse的data变量中,这里将数据取出然后组成String并传入Response的success方法中即可。

接下来看看自定义的XMLRequest。同样是继承自Request,类型使用XmlPullParser对象,说明我们准备使用Pull解析的方式来解析XML。在parseNetworkResponse方法中,先将服务器响应的数据解析成一个字符串,然后设置到XmlPullParser对象中,在delivertResponse方法中则是将XmlPullParser对象进行回调。

准备好一个xml的数据,然后使用自定义的XMLRequest来请求。可以看到,使用方法和StringRequest几乎一模一样。先创建一个XMLRequest实例,然后把服务器接口地址传入,在onResponse方法中解析响应。做自己想要的处理,如打印数据内容等等。最后将XMLRequest加入到请求队列RequestQueue中。

自定义GsonRequest

JsonRequest的数据解析是利用Android本身自带的JSONObject和JSONArray来实现的。配合JSONObject和JSONArray可以解析出任意格式的JSON数据。不过volley中默认并不支持自家的GSON来解析数据,不过大丈夫,我们可以通过之前的学习,自己来定义一个GsonRequest。

首先需要把gson的jar包添加到项目中。接着定义一个GsonRequest继承自Request。

可以看到,GsonRequest同样提供了两种构造方法,在parseNetworkResponse方法中,先将服务器响应的数据解析出来,然后通过调用Gson的fromJson方法将数据组装成对象。在deliverResponse方法中仍然将最终的数据进行回调。

猜你喜欢

转载自blog.csdn.net/kongou/article/details/74999125