博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android-Volley网络通信框架(二次封装数据请求和图片请求(包含处理请求队列和图片缓存))...
阅读量:6971 次
发布时间:2019-06-27

本文共 4652 字,大约阅读时间需要 15 分钟。

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 
*/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 包 :

       下载我的二次封装类:

  

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

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

你可能感兴趣的文章
关于游戏汉化
查看>>
Python中eval函数的作用
查看>>
把Catalina的字符串格式转化为日期格式
查看>>
Linux 笔记
查看>>
easy_install 和 pip
查看>>
ssm中返回中文字符串时出现乱码?
查看>>
【语法】NSMutableString的用法
查看>>
python
查看>>
apache2 开源协议
查看>>
使用Java绘制验证码
查看>>
前端知识点总结(html+css)部分
查看>>
docker安装elasticsearch
查看>>
设计模式
查看>>
VI/VIM 编辑器
查看>>
PHPGrid 1.4.8 发布,PHP 的 CRUD 框架
查看>>
Python面向对象关系
查看>>
OpenCV学习(2)--基本数据结构
查看>>
C#写爬虫,版本V2.0
查看>>
03 弹性盒模型
查看>>
django 项目创建使用
查看>>