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

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

  1. Android开发之Volley网络通信框架

    今天用了一下Volley网络通信框架,感觉挺好用的,写个博客记录一下用法.方便以后VC. Volley(Google提供的网络通信库,能使网络通信更快,更简单,更健壮.) 功能模块: 1. JSON, ...

  2. Android绘图机制(二)——自定义View绘制形, 圆形, 三角形, 扇形, 椭圆, 曲线,文字和图片的坐标讲解

    Android绘图机制(二)--自定义View绘制形, 圆形, 三角形, 扇形, 椭圆, 曲线,文字和图片的坐标讲解 我们要想画好一些炫酷的View,首先我们得知道怎么去画一些基础的图案,比如矩形,圆 ...

  3. Android应用框架-Volley网络通信框架

    1.Volley简介: Volley是Google 推出的 Android 异步网络请求框架和图片加载框架. 在 Google I/O 2013 大会上发布. 2.Volley特点 扩展性强. And ...

  4. Android Volley 库通过网络获取 JSON 数据

    本文内容 什么是 Volley 库 Volley 能做什么 Volley 架构 环境 演示 Volley 库通过网络获取 JSON 数据 参考资料 Android 关于网络操作一般都会介绍 HttpC ...

  5. [Android]Volley源代码分析(二)Cache

    Cache作为Volley最为核心的一部分,Volley花了重彩来实现它.本章我们顺着Volley的源代码思路往下,来看下Volley对Cache的处理逻辑. 我们回忆一下昨天的简单代码,我们的入口是 ...

  6. Android Volley完全解析(二),使用Volley加载网络图片

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/17482165 在上一篇文章中,我们了解了Volley到底是什么,以及它的基本用法. ...

  7. Volley网络通信框架

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools=&q ...

  8. Volley的简单二次封装

    新建一个application package com.honghe.myvolley.app; import com.android.volley.RequestQueue; import com. ...

  9. Android jni/ndk编程二:jni数据类型转换(primitive,String,array)

    一.数据类型映射概述 从我们开始jni编程起,就不可能避开函数的参数与返回值的问题.java语言的数据类型和c/c++有很多不同的地方,所以我们必须考虑当在java层调用c/c++函数时,怎么正确的把 ...

随机推荐

  1. Spring MVC框架一个实例的手动实现

    文件结构: SpringMVC05 // 应用程序名 ----index.html // 欢迎文件,主目录下的文件可以被URL直接访问到 ----WEB-INF // 这个目录下的文件将被保护起来不能 ...

  2. OpenJDK源码研究笔记(七)–Java字节码文件(.class)的结构

    最近在看OpenJDK源码的过程中,顺便看了Java编译器(javac)的源码. 为了理解javac的源码,需要先搞懂Java字节码文件(.class)的结构. 于是,我就认真看了下OpenJDK中J ...

  3. .ashx 实现自动路由和参数填充

    在Mvc中访问控制器,参数填充和路由控制都非常方便,但之前项目用的是webFrom,和js交互的ashx页面,路由非常麻烦要根据传进来关键字来做switch,参数填充更坑,要一个一个去form中取出来 ...

  4. 洛谷 P2630 图像变换

    P2630 图像变换 题目描述 给定3行3列的图像各像素点灰度值,给定最终图像,求最短.字典序最小的操作序列. 其中,可能的操作及对应字符有如下四种: A:顺时针旋转90度: B:逆时针旋转90度: ...

  5. myeclipse2013 jsp编辑初始化

    首先,大家可能有过这种经历.双击打开jsp编辑.它默认会打开视图,这样就使人恼火了,卡死了.所以我们能够自己设jsp的默认打开方式:打开Window-->preferences得: 搜索edit ...

  6. MYSQL 更新时间自己主动同步与创建时间默认值共存问题

    本文作者:苏生米沿 本文地址:http://blog.csdn.net/sushengmiyan/article/details/50326259 在使用SQL的时候,希望在更新数据的时候自己主动填充 ...

  7. POJ 3225 Help with Intervals(线段树)

    POJ 3225 Help with Intervals 题目链接 集合数字有的为1,没有为0,那么几种操作相应就是置为0或置为1或者翻转,这个随便推推就能够了,然后开闭区间的处理方式就是把区间扩大成 ...

  8. hdoj-1164-Eddy&#39;s research I【分解质因数】

    Eddy's research I Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) T ...

  9. Unix网络编程之环境搭建

    环境搭建 在尝试UNP书上的样例时,会由于找不到"unp.h"等问题无法编译成功.因此在学习之前须要先搭建好编译环境. 步骤 <1>下载  UNIX网络编程源码unpv ...

  10. oracle job有定时执行功能

    oracle job有定时执行的功能,可以在指定的时间点或每天的某个时间点自行执行任务.   oracle job有定时执行的功能,可以在指定的时间点或每天的某个时间点自行执行任务. 一.查询系统中的 ...