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

1.回想

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

2.重点

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

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

(3)用法

3.文件夹介绍

58a979f39a6ddae20a7b4b312c6655c9.png

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

*/

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());

}

}

}

5.使用方式

5.1 准备篇

下载Volley.jar 包 :Volley.jar

下载我的二次封装类:Volley二次封装

5.2 配置请求队列

在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" >

android:name=".MainActivity"

android:label="@string/app_name" >

5.3 基本数据请求(String,JsonObject,Gson,Bitmap 等)

实例化 VolleyHandler类 ,比如:

这里请求的是 String 故 T 传參为 String ,图片使用ImageRequest的话传參:Bitmap

VolleyHandler volleyRequest=new VolleyHandler() {

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值