版权声明:本文部分出自郭霖的博客,转载必须注明出处

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/17482095

由于博主是android的新手,写的不好的地方请原谅。

最近博主在写一个天气预报的android开发项目,里面就需要一个从网页获取数据的一个功能,恰好我在查资料的时候发现了一位大神的博客,找到了一些灵感。

1.Volley简介(开发前先下载volley jar包。百度即可搜到)

我们平时在开发Android应用的时候不可避免地都需要用到网络技术,而多数情况下应用程序都会使用HTTP协议来发送和接收网络数据。Android系统中主要提供了两种方式来进行HTTP通信,HttpURLConnection和HttpClient,几乎在任何项目的代码中我们都能看到这两个类的身影,使用率非常高。

不过HttpURLConnection和HttpClient的用法还是稍微有些复杂的,如果不进行适当封装的话,很容易就会写出不少重复代码。于是乎,一些Android网络通信框架也就应运而生,比如说AsyncHttpClient,它把HTTP所有的通信细节全部封装在了内部,我们只需要简单调用几行代码就可以完成通信操作了。再比如Universal-Image-Loader,它使得在界面上显示网络图片的操作变得极度简单,开发者不用关心如何从网络上获取图片,也不用关心开启线程、回收图片资源等细节,Universal-Image-Loader已经把一切都做好了。

Android开发团队也是意识到了有必要将HTTP的通信操作再进行简单化,于是在2013年Google I/O大会上推出了一个新的网络通信框架——Volley。Volley可是说是把AsyncHttpClient和Universal-Image-Loader的优点集于了一身,既可以像AsyncHttpClient一样非常简单地进行HTTP通信,也可以像Universal-Image-Loader一样轻松加载网络上的图片。除了简单易用之外,Volley在性能方面也进行了大幅度的调整,它的设计目标就是非常适合去进行数据量不大,但通信频繁的网络操作,而对于大数据量的网络操作,比如说下载文件等,Volley的表现就会非常糟糕。

下图所示的这些应用都是属于数据量不大,但网络通信频繁的,因此非常适合使用Volley。

2.基本用法

Volley的用法非常简单,那么我们就从最基本的HTTP通信开始学习吧,即发起一条HTTP请求,然后接收HTTP响应。首先需要获取到一个RequestQueue对象,可以调用如下方法获取到:(所有代码都写在oncreate函数里面)

RequestQueue mQueue =Volley.newRequestQueue(this);

注意这里拿到的RequestQueue是一个请求队列对象,它可以缓存所有的HTTP请求,然后按照一定的算法并发地发出这些请求。RequestQueue内部的设计就是非常合适高并发的,因此我们不必为每一次HTTP请求都创建一个RequestQueue对象,这是非常浪费资源的,基本上在每一个需要和网络交互的Activity中创建一个RequestQueue对象就足够了
有了RequestQueue产生的一个对象以后,我们就可以创立一个jsonRequest类的对象了。我们来进阶学习一下JsonRequest的用法。类似于StringRequest,JsonRequest是继承自Request类的,不过由于JsonRequest是一个抽象类,因此我们无法直接创建它的实例,那么只能从它的子类入手了。JsonRequest的构造函数需要传入三个参数,第一个参数就是目标服务器的URL地址,第二个参数是服务器响应成功的回调,第三个参数是服务器响应失败的回调。 代码如下:
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest("http://www.weather.com.cn/adat/cityinfo/101010100.html", null,        new Response.Listener<JSONObject>() {            @Override            public void onResponse(JSONObject response) {                Log.d("TAG", response.toString());            }        }, new Response.ErrorListener() {    @Override    public void onErrorResponse(VolleyError error) {        Log.e("TAG", error.getMessage(), error);    }});
响应的数据会以JSON格式返回的,然后我们在onResponse()方法中将返回的数据打印出来。

最后再将这个JsonObjectRequest对象添加到RequestQueue里就可以了,如下所示:

mQueue.add(jsonObjectRequest);

最后显示结果
在我做完天气预报后我会再更新


更多相关文章

  1. Android(安卓)TwoLineListItem
  2. 关于Android(安卓)Manifest中的
  3. Android如何通过shareduserid获取系统权限
  4. 跟着官方学习Android(安卓)— Services
  5. 一篇胎死腹中的Android文章——Dex文件结构解析
  6. 如何查看android的avd中的sqlite数据库的表
  7. Android中系统自带数据库文件中的多表联合查询疑问
  8. Android(安卓)官方架构 --- Lifecycle分析
  9. 解Android系统的进程间通信原理(二)----RPC机制

随机推荐

  1. android动画的透明度渐变、旋转动画、缩
  2. Android异步任务AsyncTask的使用与原理分
  3. android下用itext修改pdf模板文件
  4. Android仿人人客户端(v5.7.1)——有关滑动
  5. Android(安卓)AIDL运用总结
  6. Android官方文档翻译--How Android(安卓)
  7. Android开发之 混淆加固和反编译
  8. android的Notifications的例子demo
  9. Android(安卓)Studio的使用 及 JDK环境配
  10. Android开发体会与心得