Android-Volley网络通信框架(二次封装数据请求和图片请求(包含处理请求队列和图片缓存))

少年击剑更吹箫,剑气箫心一例消。这篇文章主要讲述Android-Volley网络通信框架(二次封装数据请求和图片请求(包含处理请求队列和图片缓存))相关的知识,希望能为你提供帮助。
1.回想      上篇 使用 Volley 的 JsonObjectRequest 和 ImageLoader 写了 电影列表的样例
2.重点      (1)封装Volley 内部 请求 类(请求队列,数据请求,图片请求,图片缓存)
    (2)封装 Response.Listener 和 Response.ErrorListener 回调函数
    (3)用法
3.文件夹介绍                                                

Android-Volley网络通信框架(二次封装数据请求和图片请求(包含处理请求队列和图片缓存))

文章图片

    3.1  GsonRequset.java      
          自己定义Gson请求,直接将 Json字符串   实例化为 对象
   
    3.2 VolleyApplication.java
          继承Application , 单例模式 创建 RequestQueue 
   
  3.3   VolleyBitmapCache.java 
          与LruCachae 结合 ,实现图片缓存,使得不发生 内存溢出
   
  3.4 VolleyHandler.java  
          实现Response.Lintener 和 Response.ErrorLinstener 的监听 ,并返回    onSuccess 和 onError两个回调函数 
                     
  3.5 VolleyHttpPath.java 
          封装 请求地址,能够在这里面封装请求地址。统一管理 请求地址
   
    3.6 VolleyHttpRequest.java 
        封装全部的请求调用  请求队列。数据请求。图片请求
    3.7 README
        用法
  4.VolleyHandler   回调函数 类实现【Android-Volley网络通信框架(二次封装数据请求和图片请求(包含处理请求队列和图片缓存))】    4.1 使用抽象类实现
    4.2 声明两个抽象方法 OnSuccess 和 OnError
    4.3 实现Response.Listener 和 Response.ErrorListener
    4.4 演示样例:
package com.example.volley; import com.android.volley.Response; import com.android.volley.VolleyError; /** *抽象出 成功的监听和失败的监听 *用来回调信息 * @author yuan * * @param < T> */public abstract class VolleyHandler< T> { public Response.Listener< T> reqLis; public Response.ErrorListener reqErr; public VolleyHandler() { // 初始化 变量 reqLis = new reqListener(); reqErr = new reqErrorListener(); } public abstract void reqSuccess(T response); public abstract void reqError(String error); /** * 成功后的监听 * * @author yuan * */ public class reqListener implements Response.Listener< T> {@Override public void onResponse(T response) { // 使用抽象函数 设置 回调函数 reqSuccess reqSuccess(response); } } /** * 失败后的监听 * * @author yuan * */ public class reqErrorListener implements Response.ErrorListener {@Override public void onErrorResponse(VolleyError error) { // 设置回调函数 使用 抽象方法 ReqError reqError(error.getMessage()); } }}



    其余的实现我就不解释了,能够下载使用:http://download.csdn.net/detail/lablenet/9035389


5.使用方式

    5.1 准备篇        下载Volley.jar 包 :Volley.jar
        下载我的二次封装类:Volley二次封装
   
    5.2 配置请求队列          在AndroidManifest.xml里 的Application标签下的第一行 :新添(name中为 VolleyApplication 的包名称)
android:name=" com.example.volley.VolleyApplication"


        比方:
< application < span style=" color:#ff0000; " > android:name=" com.example.volley.VolleyApplication" < /span> android:allowBackup=" true" android:icon=" @drawable/ic_launcher" android:label=" @string/app_name" android:theme=" @style/AppTheme" > < activity android:name=" .MainActivity" android:label=" @string/app_name" > < intent-filter>




      5.3  基本数据请求(String,JsonObject,Gson,Bitmap 等)            实例化 VolleyHandler类 ,比如:
                这里请求的是 String 故 T 传參为 String , 图片使用ImageRequest的话传參:Bitmap

VolleyHandler< String> volleyRequest=new VolleyHandler< String> () {@Override public void reqSuccess(String response) { // 成功的回调 : 能够操作返回的数据}@Override public void reqError(String error) { // 失败的回调 :失败的提醒} };


                最后通过 VolleyHttpRequest 调用须要请求相应的数据类型 : 

VolleyHttpRequest.String_request(url, volleyRequest);




      5.4  图片请求 :ImageLoader          注意:请求大量图片建议使用 ImageLoader ,请求单张图片 使用ImageLoader和ImageRequest均可;
        使用ImageLoader 的 话 ,须要使用 ImageListener 和   不须要使用 VolleyHandler 回调。
      先看看 ImageListener :
//第一个參数是 ImageView ,第二个 參数是 默认图片 , 第三个 參数 是 载入失败的 图片 ImageListener imageListener=ImageLoader.getImageListener(ImageView, defaultImageResId, errorImageResId)


      比如:两句代码就能够实现 图片的载入和图片缓存(已经封装) :
ImageListener imageListener = ImageLoader.getImageListener(imageView, R.drawable.ic_launcher, R.drawable.ic_launcher); 网络请求 : VolleyHttpRequest.Image_Loader(url, imageListener);




6.优化样例    优化下篇的电源列表的列子:
    6.1 优化图片载入          在Adapter 里载入图片的时候,仅仅须要两句代码就实现了 UI层 请求图片。
//实现ImageListener ImageListener imageListener = ImageLoader.getImageListener(imageView, R.drawable.ic_launcher, R.drawable.ic_launcher); //请求 图片 设置图片 VolleyHttpRequest.Image_Loader(url, imageListener);




    6.2 优化请求数据          使用的是JsonObject_Request ;比如
String url=VolleyHttpPath.getSharedAll(); VolleyHandler< JSONObject> volleyRequest=new VolleyHandler< JSONObject> () {@Override public void reqSuccess(JSONObject response) { // 成功后的解析 List< shared> list=new ArrayList< shared> (); String str=" 网络错误" ; try { if(response.getString(" msg" ).equals(" success" )& & response.getInt(" code" )==1){//json解析 为 List< shared> JSONArray array=new JSONArray(response.getString(" data" )); for(int i=0; i< array.length(); i++){ JSONObject object=(JSONObject) array.get(i); shared s=new shared(); s.setId(object.getInt(" id" )); s.setName(object.getString(" name" )); s.setPic(object.getString(" pic" )); s.setTotol(object.getString(" totol" )); list.add(s); } if(list.size()> 0){ //解析完成 。适配 listview MovieListAdapter adapter=new MovieListAdapter(list); move_list.setAdapter(adapter); }else{ str=" 没有解析出来" +response.toString(); Show(str); }}else{ Show(response.getString(" msg" )); } } catch (JSONException e) { // 发生异常 Show(e.getMessage()); } }@Override public void reqError(String error) { // 失败 Show(" JsonObject error:" +error); } }; //网络请求 VolleyHttpRequest.JsonObject_Request(url, volleyRequest);




    6.3 demo下载
          实例——电影列表优化版下载

7.总结    使用Volley网络通信框架 ,主要是使用其来 载入数据 ,载入图片机制,图片缓存机制,和Activity 联动机制的实现;不有用与图片的上传 ;以下将学习使用AsyncHttpClient 实现 图片的上传 ,当然也是一个开源框架,敬请关注;谢谢;






































    推荐阅读