上篇 使用 Volley 的 JsonObjectRequest 和 ImageLoader 写了 电影列表的例子
(1)封装Volley 内部 请求 类(请求队列,数据请求,图片请求,图片缓存)
(2)封装 Response.Listener 和 Response.ErrorListener 回调函数
(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.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
*/
public abstract class VolleyHandler {
public Response.Listener 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 {
@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
下载Volley.jar 包 :Volley.jar
下载我的二次封装类:Volley二次封装
在AndroidManifest.xml里 的Application标签下的第一行 :新添(name中为 VolleyApplication 的包名称)
android:name="com.example.volley.VolleyApplication"
android:name="com.example.volley.VolleyApplication"
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
实例化 VolleyHandler类 ,例如:
这里请求的是 String 故 T 传参为 String , 图片使用ImageRequest的话传参:Bitmap
VolleyHandler volleyRequest=new VolleyHandler() {
@Override
public void reqSuccess(String response) {
// 成功的回调 : 可以操作返回的数据
}
@Override
public void reqError(String error) {
// 失败的回调 :失败的提醒
}
};
VolleyHttpRequest.String_request(url, volleyRequest);
注意:请求大量图片建议使用 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);
优化下篇的电源列表的列子:
在Adapter 里加载图片的时候,只需要两句代码就实现了 UI层 请求图片;
//实现ImageListener
ImageListener imageListener = ImageLoader.getImageListener(imageView,
R.drawable.ic_launcher, R.drawable.ic_launcher);
//请求 图片 设置图片
VolleyHttpRequest.Image_Loader(url, imageListener);
使用的是JsonObject_Request ;例如
String url=VolleyHttpPath.getSharedAll();
VolleyHandler volleyRequest=new VolleyHandler() {
@Override
public void reqSuccess(JSONObject response) {
// 成功后的解析
List list=new ArrayList();
String str="网络错误";
try {
if(response.getString("msg").equals("success")&&response.getInt("code")==1){
//json解析 为 List
JSONArray array=new JSONArray(response.getString("data"));
for(int i=0;i0){
//解析完毕 ,适配 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);
实例——电影列表优化版下载
使用Volley网络通信框架 ,主要是使用其来 加载数据 ,加载图片机制,图片缓存机制,和Activity 联动机制的实现;不实用与图片的上传 ;下面将学习使用AsyncHttpClient 实现 图片的上传 ,当然也是一个开源框架,敬请关注;谢谢;