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


    1.回想

          上篇 使用 Volley 的 JsonObjectRequest 和 ImageLoader 写了 电影列表的样例

    2.重点 

        (1)封装Volley 内部 请求 类(请求队列,数据请求,图片请求,图片缓存)

        (2)封装 Response.Listener 和 Response.ErrorListener 回调函数

        (3)用法

    3.文件夹介绍

                                                   

       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  回调函数 类实现

        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 实现 图片的上传 ,当然也是一个开源框架,敬请关注;谢谢;



  • 相关阅读:
    5个排序算法
    原生侧边栏sidebar
    静态方法、实例方法、继承
    函数作用域之闭包与this!
    OOP面向对象编程(下)
    数组方法篇二
    对象
    nginx windows负载均衡入门
    NVelocity
    python3简单爬虫
  • 原文地址:https://www.cnblogs.com/brucemengbm/p/6977895.html
Copyright © 2020-2023  润新知