8.3 网络通讯 Volley

  AsyncHttpClient,它把HTTP全部的通讯细节所有封装在了内部,咱们只须要简单调用几行代码就能够完成通讯操做了。android

  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包。

相关文章
相关标签/搜索