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

原创 2015年08月22日 14:59:49

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



版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/LABLENET/article/details/47859613

Android xutil3网络模块二次封装

在Android开发过程中,难免有网络请求,通常的在子线程中请求网络,在主线程中更新UI,这样的话比较麻烦,国内大神写了好多框架,其中最常见的就是xutil了,在开发过程中,需要实现它的网络请求部分的...
  • baidu_23086307
  • baidu_23086307
  • 2016-06-08 12:20:30
  • 2724

Android Okhttp3框架二次封装请求管理类

前言:       网络框架有很多,各领风骚各有不足,比如volley就是很优秀了,但是不支持大文件上传;之前项目中使用过的Xutils开源框架,使用起来也是蛮方便的,功能比较全,有数据库、图片...
  • csdn_aiyang
  • csdn_aiyang
  • 2017-03-28 12:33:18
  • 3080

volley框架<em>封装</em>(实现的非常好)

2016-06-01 上传大小:1.04MB androidvolley<em>封装</em> 实现的volley 框架的各种功能,包括 异步<em>图片</em> 各种request请求,很有参考价值 综合评分:4(2位用户评分) 收藏评论(1...
  • 2018年03月31日 00:00

Volley框架的二次封装

z       我们平时开发Android app 不可避免的会使用到网络技术,大多数情况下我们都会以http或者https来请求网络数据,而传统的HttpURLConnection、HttpCli...
  • soul_code
  • soul_code
  • 2015-12-14 09:32:50
  • 6259

Volley二次封装

  • 2015年08月22日 15:07
  • 6KB
  • 下载

iOS 数据请求类AFNetworking 简单封装

iOS 开发中,无非就是界面搭建以及数据配置 .今天我们就对我们常用的第三方请求类AFNetworking 再进行简单的封装.让我们的代码书写更加简洁.耦合性更低!       如果你想了解并使用常用...
  • ONE_PERSON_ONE_LIFE
  • ONE_PERSON_ONE_LIFE
  • 2016-12-08 10:15:58
  • 980

Volley框架二次封装

谷歌官方推出的Volley框架,实现了小数据、多频发,以及图片加载的网络操作。这方便了大家开发,但是没有对获取Cookie做相应的处理,用户想要获取的话,很麻烦,这也造成了代码冗杂,所以为了方便大家,...
  • u012925323
  • u012925323
  • 2015-12-30 20:05:07
  • 675

Android volley(5)MultipartEntity 封装 volley上传 —— 一个参数多张图、多张图片多张图

博客源址:http://blog.csdn.net/kroclin/article/details/40631271 一、前言 Google自从2013的IO大会上发布volley框架之后...
  • Buaaroid
  • Buaaroid
  • 2016-06-21 16:14:25
  • 2393

volley.jar

  • 2015年08月20日 00:25
  • 140KB
  • 下载

Android 加载网络图片并做缓存

Android volley 图片缓存加载图片
  • qq_33023933
  • qq_33023933
  • 2017-08-25 16:19:52
  • 473
收藏助手
不良信息举报
您举报文章:Android-Volley网络通信框架(二次封装数据请求和图片请求(包括处理请求队列和图片缓存))
举报原因:
原因补充:

(最多只允许输入30个字)