zoukankan      html  css  js  c++  java
  • 8.3 网络通信 Volley

      AsyncHttpClient,它把HTTP所有的通信细节全部封装在了内部,我们只需要简单调用几行代码就可以完成通信操作了。

      Universal-Image-Loader,它使得在界面上显示网络图片的操作变得极度简单,开发者不用关心如何从网络上获取图片,也不用关心开启线程、回收图片资源等细节,Universal-Image-Loader已经把一切都做好了。

      Volley可是说是把AsyncHttpClient和Universal-Image-Loader的优点集于了一身,既可以像AsyncHttpClient一样非常简单地进行HTTP通信,也可以像Universal-Image-Loader一样轻松加载网络上的图片。除了简单易用之外,Volley在性能方面也进行了大幅度的调整,它的设计目标就是非常适合去进行数据量不大,但通信频繁的网络操作,而对于大数据量的网络操作,比如说下载文件等,Volley的表现就会非常糟糕。

    基础应用—StringRequest---发送HTTP请求和接收响应

    1. 首先需要先获得RequestQueue对象:

      RequestQueue mQueue = Volley.newRequestQueue(context);

    RequestQueue是一个请求队列对象,它可以缓存所有的HTTP请求,然后按照一定的算法并发地发出这些请求。RequestQueue内部的设计就是非常合适高并发的,因此我们不必为每一次HTTP请求都创建一个RequestQueue对象,这是非常浪费资源的,基本上在每一个需要和网络交互的Activity中创建一个RequestQueue对象就足够了。

    2. 接下来为了要发出一条HTTP请求,我们还需要创建一个StringRequest对象,如下所示:

    StringRequest stringRequest = new StringRequest("http://www.baidu.com", 
                            new Response.Listener<String>() { 
                                public void onResponse(String response) {   Log.d("TAG", response);  } 
                            }, new Response.ErrorListener() { 
                                public void onErrorResponse(VolleyError error) { Log.e("TAG", error.toString() ); } 
                            }); 

      可以看到,这里new出了一个StringRequest对象,StringRequest的构造函数需要传入三个参数,第一个参数就是目标服务器的URL地址,第二个参数是服务器响应成功的回调,第三个参数是服务器响应失败的回调。

    3. 最后,将这个StringRequest对象添加到RequestQueue里面:mQueue.add(stringRequest);

      此外还有:(替换Response.Listener相应数据类型:JSONObject/Bitmap

    1) JsonRequest:抽象类,有JsonObjectRequest和JsonArrayRequest两个子类,用于请求JSON数据和数组。

    2) ImageRequest加载网络图片

    3) ImageLoader:也可以用于加载网络上的图片,并且它的内部也是使用ImageRequest来实现的,不过ImageLoader明显要比ImageRequest更加高效,因为它不仅可以帮我们对图片进行缓存,还可以过滤掉重复的链接,避免重复发送请求。由于ImageLoader已经不是继承自Request的了,所以它的用法也和我们之前学到的内容有所不同,总结起来大致可以分为以下四步

      A.       创建一个RequestQueue对象,同上。

      B.        创建一个ImageLoader对象:

    ImageLoader imageLoader = new ImageLoader(mQueue, new ImageCache() { 
        public void putBitmap(String url, Bitmap bitmap) {  } 
        public Bitmap getBitmap(String url) {  return null;  } 
    });

      C.       获取一个ImageListener对象:

    ImageListener listener = ImageLoader.getImageListener(imgView, R.drawable.def_image, R.drawable.failed_image); 

      D.       调用ImageLoader的get()方法加载网络上的图片:

    imageLoader.get("http://img.my.csdn...jpeg", listener,200,200);  //第三四个参数限制图片大小,可选

      4) NetworkImageView:是一个自定义控制,它是继承自ImageView的,具备ImageView控件的所有功能,并且在原生的基础之上加入了加载网络图片的功能:

    A.       布局中直接使用<com.android.volley.toolbox.NetworkImageView>

    B.        得到了NetworkImageView控件的实例之后,我们可以调用它的setDefaultImageResId()、setErrorImageResId() setImageUrl()方法来分别设置加载中/加载失败以及目标图片的URL地址

       5) 自定义Request:

      可以参考StringRequest自定义其他的请求:

      如   XMLRequest:用于请求一条XML格式的数据,在Listener中使用XmlPullParser参数。

        GsonRequest:用于解析Gson数据,需要导入Gson包。

  • 相关阅读:
    XML中<beans>中属性概述
    (转)深入理解Java:注解(Annotation)自定义注解入门
    maven 配置参数详解!
    maven setting.xml文件配置详情
    hashMap与 hashTable , ArrayList与linkedList 的区别(详细)
    jdbc参数
    linux下ftp命令的安装与使用
    java中的Iterator与增强for循环的效率比较
    命令行窗口常用的一些小技巧
    在eclispe的类中快速打出main方法
  • 原文地址:https://www.cnblogs.com/keyarchen/p/6063203.html
Copyright © 2011-2022 走看看