A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘松老师 高级黑马   /  2015-5-26 13:28  /  1468 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 刘松老师 于 2015-5-26 13:27 编辑

什么是Volley?
       在2013年Google I/O大会上推出了一个新的网络通信框架——Volley。Volley可以说是把AsyncHttpClient和Universal-Image-Loader的优点集于了一身,既可以像AsyncHttpClient一样非常简单地进行HTTP通信,也可以像Universal-Image-Loader一样轻松加载网络上的图片。

准备工作
      使用GItVolley源码下载下来,导入Eclipse,导出为jar
                  源码下载地址:https://android.googlesource.com/platform/frameworks/volley
                  jar包下载地址:http://download.csdn.net/detail/nobcdz/6482641

案例分析
      接下来, 我们通过一个简单的案例,来了解一下Volley的使用方式。
一.创建Demo程序
      使用eclipse创建Android项目VolleyDemo,将Volley.jar包导入到项目中,如下图所示:
               
                     图1-1 VolleyDemo
二.快速开始1.在MainActivityOncreate()方法中获取Request请求队列对象
  1. @Override
  2. protected void onCreate(Bundle savedInstanceState) {
  3.        super.onCreate(savedInstanceState);
  4.        setContentView(R.layout.activity_main);
  5.        //获取请求队列对象
  6.        RequestQueue queue = Volley.newRequestQueue(this);
  7. }
复制代码
Volley.newRequestQueue(this)获取请求队列,RequestQueue可以缓存所有的HTTP请求,然后按照一定的算法并发地发出这些请求,所以RequestQueu非常合适高并发
2.activity_mian.xml进行简单布局
           
                                                                              图1-2 界面
3.JsonObjectRequest 用法
  1. private void jsonObjectRequestGET() {
  2.             JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Method.GET,
  3.                       "http://m.weather.com.cn/data/101030100.html",
  4.                       null,
  5.                       new Response.Listener<JSONObject>() {
  6.                               @Override
  7.                               public void onResponse(JSONObject response) {
  8.                                          //连接成功,获取返回数据
  9.                                          Log.i("JSONObjectRequest", response.toString());
  10.                                          data.setText(response.toString());
  11.                               }                        
  12.               },
  13.                      new Response.ErrorListener() {
  14.                              @Override
  15.                              public void onErrorResponse(VolleyError error) {
  16.                                         //连接失败,获取失败的信息
  17.                                         Log.e("JSONObjectRequest", error.getMessage(),error);
  18.                                         data.setText(error.getMessage());
  19.                              }
  20.                }){
  21.                        @Override
  22.                        public com.android.volley.Request.Priority getPriority() {
  23.                                   //设置优先级
  24.                                  return Priority.HIGH;
  25.                         }
  26.              };
  27.              queue.add(jsonObjectRequest);//将Request添加到请求队列中
  28. }
复制代码
new JsonObjectRequest表示创建一个JsonRequest请求,其中需要几个参数:Method.GET表示访问式;http://m.weather.com.cn/data/101030100.html为访问路径,此路径为中国天气网获取天气的路径;null为访问参数,使用JSONObject封装,我这里没有用到,所以置为null;Listener为访问成功回调的方法,可在此方法的onResponse中获取返回的数据;ErrorListener为访问失败回调的方法,在onErrorResponse方法中可获取失败的信息;getPriority方法用来设置请求在请求队列中的优先级queue.add(jsonObjectRequest)是将请求添加到请求队列中
运行程序,点击jsonRequst按钮,得出返回结果,如下图所示:
              
                                                                       图1-3 JsonObjectRequest执行结果图示
4.StringRequest 的用法
  1. private void stringRequestPost() {
  2.             StringRequest stringRequest = new StringRequest(Method.POST,
  3.                          "http://app.ihome86.com/php/index.php/register/get_code",
  4.                          new Response.Listener<String>() {
  5.                                  @Override
  6.                                   public void onResponse(String response) {
  7.                                              data.setText(response.toString());
  8.                                   }
  9.                           }, new Response.ErrorListener() {
  10.                                     @Override
  11.                                     public void onErrorResponse(VolleyError error) {
  12.                                               data.setText(error.getMessage());
  13.              }
  14.              }){
  15.                          @Override
  16.                          protected Map<String, String> getParams()throws AuthFailureError {
  17.                                           Map<String, String> map = new HashMap<String, String>();
  18.                                           map.put("tel", "13121646499");
  19.                                           return map;
  20.                          }
  21.              };
  22.              queue.add(stringRequest);
  23. }
复制代码
StringRequest请求的使用方式和JsonObjectRequest 使用方式相似,其中getParams()方法用于设置post访问时的访问参数。
运行程序,点击StringRequest按钮,得出返回结果,如下图所示:
            
                                                               图1-4 StringRequest执行结果图示
5.ImageRequest的用法
  1. private void imageRequest() {
  2.         ImageRequest imageRequest = new ImageRequest(
  3. "http://a.hiphotos.baidu.com/image/w%3D2048/sign=d2ebf5336963f6241c5d3e03b37ceaf8/902397dda144ad347976f98dd2a20cf430ad85ea.jpg",
  4.                 new Response.Listener<Bitmap>() {
  5.                         @Override
  6.                         public void onResponse(Bitmap bitmap) {
  7.                                         imageView.setImageBitmap(bitmap);
  8.                         }
  9.         }, 0, 0, Config.ARGB_8888, new Response.ErrorListener() {
  10.                         @Override
  11.                         public void onErrorResponse(VolleyError error) {
  12.                                 data.setText(error.toString());
  13.                         }
  14.         });
  15.         queue.add(imageRequest);
  16. }
复制代码
ImageRequest的用法和JsonRequestStringRequest基本一致,其中:第一个参数为图片的地址,第二个参数为连接成功回调方法,第三个参数为图片最大宽度,第四个参数为图片最大高度,第五参数为图片的色彩模式,第六个参数为连接失败回调的方法。
运行程序,点击ImageRequest按钮,得出返回结果,如下图所示:
                                    
                                                                     1-4 ImageRequest执行结果图示
总结
       通过演示的例子,我们可以看出来,JsonObjectReqeustStringRequestImageReqeust的用法基本上是一样,Volley的易用之处也体现在这里,其他的请求方式我就不再去讲解了。Volley简化了网络通信的一些开发,现在也越来也多的应用到项目中去,它的设计目标就是非常适合去进行数据量不大,但通信频繁的网络操作,缺点对于大数据量的网络操作,比如说下载文件等,Volley的表现就会非常糟糕,还是需要使用原始的方法。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马