• Volley框架的简单使用


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

    准备工作

    使用GIt将Volley源码下载下来,导入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.在MainActivity的Oncreate()方法中获取Request请求队列对象
     
    @Override
    protected void onCreate(Bundle savedInstanceState) {
             super.onCreate(savedInstanceState);
             setContentView(R.layout.activity_main);
             //获取请求队列对象
             RequestQueue queue = Volley.newRequestQueue(this);
    }
     
    Volley.newRequestQueue(this)获取请求队列,RequestQueue可以缓存所有的HTTP请求,然后按照一定的算法并发地发出这些请求,所以RequestQueue非常合适高并发。
     
    2.对activity_mian.xml进行简单布局
                 
    图1-2  界面
    3.JsonObjectRequest 用法
     
    private void jsonObjectRequestGET() {
             JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Method.GET,
                      "http://m.weather.com.cn/data/101030100.html", 
                      null, 
                      new Response.Listener<JSONObject>() {
                      @Override
                      public void onResponse(JSONObject response) {
                               //连接成功,获取返回数据
                               Log.i("JSONObjectRequest", response.toString());
                               data.setText(response.toString());
                      }                          
                      }, 
                      new Response.ErrorListener() {
                      @Override
                      public void onErrorResponse(VolleyError error) {
                               //连接失败,获取失败的信息
                               Log.e("JSONObjectRequest", error.getMessage(),error);
                               data.setText(error.getMessage());
                      }
                      }){
                      @Override
                      public com.android.volley.Request.Priority getPriority() {
                               //设置优先级
                               return Priority.HIGH;
                      }
                      };
             queue.add(jsonObjectRequest);//Request添加到请求队列中
    }
     
    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 的用法
     
    private void stringRequestPost() {
             StringRequest stringRequest = new StringRequest(Method.POST, 
                      "http://app.ihome86.com/php/index.php/register/get_code", 
                      new Response.Listener<String>() {
                               @Override
                               public void onResponse(String response) {
                                        data.setText(response.toString());
                               }
                      }, new Response.ErrorListener() {
    
    
                               @Override
                               public void onErrorResponse(VolleyError error) {
                                        data.setText(error.getMessage());
                               }
                      }){
                      @Override
                      protected Map<String, String> getParams()throws AuthFailureError {
                               Map<String, String> map = new HashMap<String, String>();
                               map.put("tel", "13121646499");
                               return map;
                      }
                      };
             queue.add(stringRequest);
    }
     
    StringRequest请求的使用方式和JsonObjectRequest 使用方式相似,其中getParams()方法用于设置post访问时的访问参数。
     
    运行程序,点击StringRequest按钮,得出返回结果,如下图所示:
     
              
     
    图1-4  StringRequest执行结果图示
     
    5.ImageRequest的用法
     
    private void imageRequest() {
             ImageRequest imageRequest = new ImageRequest(
             "http://a.hiphotos.baidu.com/image/w%3D2048/sign=d2ebf5336963f6241c5d3e03b37ceaf8/902397dda144ad347976f98dd2a20cf430ad85ea.jpg", 
                      new Response.Listener<Bitmap>() {
                               @Override
                               public void onResponse(Bitmap bitmap) {
                                                 imageView.setImageBitmap(bitmap);
                               }
             }, 0, 0, Config.ARGB_8888, new Response.ErrorListener() {
                               @Override
                               public void onErrorResponse(VolleyError error) {
                                        data.setText(error.toString());
                               }
             });
             queue.add(imageRequest);
    }
     
    ImageRequest的用法和JsonRequest、StringRequest基本一致,其中:第一个参数为图片的地址,第二个参数为连接成功回调方法,第三个参数为图片最大宽度,第四个参数为图片最大高度,第五参数为图片的色彩模式,第六个参数为连接失败回调的方法
     
    运行程序,点击ImageRequest按钮,得出返回结果,如下图所示:
     
     
    图1-4  ImageRequest执行结果图示
     

    总结

    通过演示的例子,我们可以看出来,JsonObjectReqeust、StringRequest、ImageReqeust的用法基本上是一样,Volley的易用之处也体现在这里,其他的请求方式我就不再去讲解了。Volley简化了网络通信的一些开发,现在也越来也多的应用到项目中去,它的设计目标就是非常适合去进行数据量不大,但通信频繁的网络操作,缺点对于大数据量的网络操作,比如说下载文件等,Volley的表现就会非常糟糕,还是需要使用原始的方法。
  • 相关阅读:
    NodeJs搭建简单的Http和Https服务器
    VSCode C++开发环境配置
    OpenCV查找并发现轮廓
    OpenCV使用连通组件检测并输出图像中的对象
    OpenCV使用阈值截断实现二值分割(黑白图)
    使用OpenCV实现背景减除
    get current UTC datetime of Python
    setTimeout and setInterval counterpart of Python
    setup airflow on MySQL
    HeidiSQL
  • 原文地址:https://www.cnblogs.com/vegetate/p/9997344.html
Copyright © 2020-2023  润新知