Volley的简单封装

  算了一下,好像有很久没有写博客了。其实,关于写博客这件事,我从来没有把他当成我的一种任务,而是在学习过程中的一种总结和自我发现,同样也是为了练一练文笔,说不定有一天,我也能出一本书像《第一行代码》,《安卓从小工到专家》,《App研发录》等等这样的书。人生短短数十载,总要留下些什么。好像说的有点多,话不多说。来谈谈今天的主要内容。我总在一些交流群中看到有人说,那个XXX二次封装的OkHttp如何怎样怎样。其实,当我看到他这样说的时候我在想,为什么不自己进行二次封装同样更加满足自己的需求呢?也许你会觉得这东西很难,人家有现成的东西为什么不用呢?我觉得,前提是你要理解了才能拿来用。话不多说,拿一个我自己做的Demo给大家看一看。

这个小东西,我所使用的是Volley,并且实现了对Volley的简单二次封装。这里写出来,希望对你有所启发。

  数据方面,由于调用的是聚合上的免费API,返回的数据是Json。在安卓中处理Json,其实首选是想Gson,fastJson,这样的框架。因为我Gson用的比较多,并且关于写JavaBean对象,Android Studio 也有jsonformat这样的小插件可以快速实现,省去了很多时间。

***Volley整合Gson**

  好在Volley提供了一个Request类帮助我们实现自定义的Request。所以实现起来并不复杂。我们希望,从我们自定义的Requet中能够直接返回我们的JavaBean对象,便于我们对数据的操作。实现代码:

 

public class ApiJsonRequest<T>extends Request<T>{
    private Class<T> clazz;
    private Response.Listener<T> mListener;
    private Gson gson;
    private int position;

    public ApiJsonRequest(int method, String url, Response.ErrorListener errorListener,
                          Response.Listener<T> listener, Class<T> clazz) {
        super(method, url, errorListener);
        this.mListener=listener;
        this.clazz=clazz;
    }

    @Override
    protected Response<T> parseNetworkResponse(NetworkResponse response) {
        String json;
        try {
            json=new String(response.data, HttpHeaderParser.parseCharset(response.headers));
        } catch (UnsupportedEncodingException e) {
            json=new String(response.data);
        }
        T obj;
        try {
            if (gson==null) {
                gson = new Gson();
            }
            obj=gson.fromJson(json,clazz);
            return Response.success(obj,HttpHeaderParser.parseCacheHeaders(response));
        }catch (Exception e) {
            return Response.error(new ParseError());
        }

    }

    @Override
    protected void deliverResponse(T response) {
        mListener.onResponse(response);
    }
}

  可以看到,这里主要有三个方法需要我们去实现。构造方法中,我们传入一个请求成功的监听。由于我们需要返回JavaBean对象,但是却不知道这个JavaBean对象具体指向谁,所以这里可以传入一个泛型T,在实现这个Request的时候就指定JavaBean对象用于Gson解析。之后再parseNetworkResponse中通过NetworkResponse拿到调用String类的构造方法,将二进制字节组转换为一个Java字符串,用于我们的Gson解析,为了防止Gson对象在数据请求的时候被重复调用,要在初始化时进行判空。最后调用Json.fromJson将这个对象Response出去;deliverResponse这个方法主要用于决定我们返回的数据对象。下面是使用:

 

private void getData() {
        ApiJsonRequest<NewsParseBean> apiJsonRequest = new ApiJsonRequest<>(Request.Method.GET,
                NewsBean.requestUrl + type + NewsBean.apiKey, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {


            }
        }, new Response.Listener<NewsParseBean>() {
            @Override
            public void onResponse(NewsParseBean response) {
                //获取最新数据
                processData(response);
                //显示新闻
                showNews();

            }
        }, NewsParseBean.class,position);
        apiJsonRequest.setTag(getClass().getSimpleName());
        requestQueue.add(apiJsonRequest);
    }

 

一个简单的整合Gson的Volley就写完了。是不是很简单?

***整合LruCache***

  上图那个小Demo,运行起来是十分的流畅。在图片加载方面,我所使用的是Android中的LruCache。一种内存缓存策略,你能看到,其实加载速度是非常的快,非常的流畅的。附上代码:

public class ApiImageCache implements ImageLoader.ImageCache {
    private LruCache<String,Bitmap>lruCache;
    private static int maxSize= ApiConstant.IMAGE_SIZE;
    private static ApiImageCache instance;
    private ApiImageCache() {
        lruCache=new LruCache<String, Bitmap>(maxSize){
            @Override
            protected int sizeOf(String key, Bitmap value) {
                return value.getByteCount()/1024/1024;
            }
        };
    }
    public static synchronized ApiImageCache getInstance () {
        if (instance==null) {
            instance=new ApiImageCache(){};
        }
        return instance;
    }
    @Override
    public Bitmap getBitmap(String url) {
        return lruCache.get(url);
    }

    @Override
    public void putBitmap(String url, Bitmap bitmap) {
         lruCache.put(url,bitmap);

    }
}

在实现Volley加载图片的时候需要我们对图片进行自定义的处理,这里实现ImageLoader.ImageCache就可以了。之后,我为了方便,将它写成单例。在构造方法中使用LruCache进行图片加载处理。实现很简单,需要注意的是LruCache返回的是图片的大小。

Volley:

public class ApiVolleyUtils {
    private static ApiVolleyUtils instance;
    private static RequestQueue requestQueue;
    private static ImageLoader imageLoader;
    private static ImageLoader.ImageCache imageCache;

    public RequestQueue getRequestQueue() {
        return requestQueue;
    }

    public ImageLoader getImageLoader() {
        return imageLoader;
    }

    public ImageLoader.ImageCache getImageCache() {
        return imageCache;
    }

    private ApiVolleyUtils(Context context){
        requestQueue= Volley.newRequestQueue(context);
        imageCache=ApiImageCache.getInstance();
        imageLoader=new ImageLoader(requestQueue,imageCache);

    }
    public static ApiVolleyUtils getInstance(Context context) {
        if (instance==null) {
            synchronized (ApiVolleyUtils.class){
                if (instance==null) {
                    instance=new ApiVolleyUtils(context);
                }
            }
        }
        return instance;
    }

}

使用:

ImageLoader imageLoader = apiVolleyUtils.getImageLoader();
            if (!NetUtils.isNetWork(UIUtils.getContext())) {
                // getDiskImage(holder, diskLruCache, key);
            } else {
                //getNetDisk(position, diskLruCache, key);
                imageLoader.get(respondList.get(position).getThumbnail_pic_s(),
                        new ImageLoader.ImageListener() {
                            @Override
                            public void onResponse(ImageLoader.ImageContainer response, boolean isImmediate) {
                                holder.ivNews.setImageBitmap(response.getBitmap());
                            }
                            @Override
                            public void onErrorResponse(VolleyError error) {

                            }
                        });

好了,关于这个小Demo中的Volley网络模块接介绍完了,关于这些框架,我们不仅需要学习如何使用跟重要的是,要学会如何对框架进行二次封装,满足自己的实际需要。希望这篇博客对你有所启发。

 

转载于:https://www.cnblogs.com/lovelyYakir/p/6078409.html

从零构建:用Simulink搭建固定翼无人机六自由度模型的避坑指南 本文详细介绍了使用Simulink从零构建固定翼无人机六自由度动力学模型的完整流程和避坑指南。重点解析了模型架构设计、气动力计算、参数配置、仿真求解器选择等关键环节的常见问题与解决方案,帮助开发者快速建立准确可靠的无人机控制系统仿真模型。 阅读详情

相关推荐

ros2笔记-4.6使用launch启动脚本

ros2 4.6 使用launch启动多节点

bohu83的博客 1311

使用volley进行网络请求

//Volley 缓存StringRequest,JsonObjectRequest两级缓存(网络--->磁盘) //ImageLoader(三级缓存 网络--->内存缓存---->磁盘) //从缓存中获取数据(缓存失效时间失效)--->hit获取直接展示数据 //没有获取数据,走网络,响应头,判断是否进行缓存 //首先展示的是volley的工具类 封装到一个类中统一使用  packag

HotSmoking的博客 1456

BraTS数据集保姆级使用指南:从下载、预处理到可视化(附Python脚本)

本文提供BraTS数据集的完整使用指南,涵盖从下载、预处理到可视化的全流程,并附有Python脚本示例。详细解析了医学影像处理中的数据结构、标准化流程和可视化技巧,帮助初学者快速掌握BraTS数据集的应用方法,提升医学影像分析效率。

weixin_27310417的博客 463

Volley 简单封装调用超简单

实用volley 已经有一段时间了,觉得每次都去实例化一个方法感觉代码重复量大,于是对volley做了些封装提高代码的复用性 首先我们创建一个抽象类: 做网络监听: /**  * Volley 请求监听  */ public abstract class VolleyInterface {  // Volley监听类  public Response.Listener mLi

liufatao的博客 385

基因家族快速鉴定指南:Windows平台下的HMMER实战解析

本文详细解析了在Windows平台下使用HMMER工具进行基因家族快速鉴定的完整实战流程。通过手把手指导,从软件获取、数据准备到模型构建与序列搜索,帮助生物信息学新手无需Linux环境,即可高效完成bZIP转录因子等家族的鉴定工作,大幅降低分析门槛。

weixin_29255731的博客 460

开关变换器分析:大信号模型与小信号模型

是电力电子系统建模中的两类基本方法,分别用于描述系统在不同工作条件下的动态行为。它们的核心区别在于是否对变量进行线性化近似,以及适用的分析场景。

创新改变世界! 1909

Volley的简单使用,和简单二次封装

Volley作为Android谷歌使用的第三方网略请求框架,在网略数据请求时有很多优势: 1.通信更快,更简单,开发效率会得到很大提升,开发出来的网略模式性能比较稳定 2.Get、Pos t网略请求及图片的网络图片的高效率异步请求 3.可以对网略请求进行优先级排序 4.网略请求的缓存:当用户的网略不太好时,Volley自动对网略数据请求做缓存处理 上一段代码简单展示一下 先封装MyAp

ViewHandKownHealth的博客 1192

Pixhawk RPi CM4 Baseboard 树莓派CM4安装Ubuntu20.04 server 配置ros mavros mavsdk

cm4配置ros mavros连接pixhawk4 Pixhawk RPi CM4 Baseboard

baidu_41704597的博客 2128

Volley之简单封装(1)

本文对Volley简单封装,本文只是记录volley的使用封装1,加载视图与请求分开:数据回调的classpublic abstract class CallBack { protected void onFail(int errCode,String errMsg) { //TODO 请求失败处理 finish(); } public abstr

Android_flk 324

【ComfyUI 基础教程】ComfyUI 局部重绘工作流教程

本篇指南将带你了解 ComfyUI 中的局部重绘工作流,并带你完成一个局部重绘的示例,以及遮罩编辑器的使用等。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 303

Xilinx平台SRIO介绍(二)SRIO IP核基础知识

使用SRIO IP核必须掌握的基础知识! 理解了这篇,剩下的只是代码罢了。

数字IC/FPGA杂货铺,找一找,或许有你想要的~ 4万+

Volley与Activity生命周期联动及简单的二次封装

Activity关闭时取消请求队列中的请求:可以在上一篇博客中的例子MainActivity的onStop方法中添加如下代码:@Override protected void onStop() { super.onStop(); //通过Tag标签取消请求队列中对应的全部请求 MyApplication.getHttpQueue().cance

lyz12600的专栏 1291

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Android 自己简单封装的Volley

这是我自己简单封装的volley,封装的不好哈,希望大家能多多提提意见,来让我改正! 1. 首先下载个Volley的jar包,拷贝到libs下,同步一下代码 2. 代码 ,注释挺详细的创建一个Application,方便加入队列package com.nsv.rolltv;import android.app.Application; import android.content.Conte

姚丹的博客 473

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Volley简单封装之Gson解析

这里设计了一个InternetHelper接口,然后实现了接口 VolleyHelper类,Activity调用 VolleyHelper类中的方法发起网络请求,然后通过继承抽象类VolleyCallBack来获得网络请求的结果,通知View视图层更新UI。至此,就将View视图和网络请求(数据处理)隔离开。思路:{“weathering”{“city”:”beijing”,”cityid”:”10

qq_33022345的博客 598

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

拒绝繁琐,Volley框架的简单封装

使用过volley的小伙伴们都知道volley框架的强大之处,volley主要是用来处理数据量小,频率高的网络请求。以StringRequest为例,其基本使用方法如下。 1、创建请求队列 private RequestQueue rq;rq= Volley.newRequestQueue(MainActivity.this); 2、创建请求对象并发送给请求队列

小贝的博客 688

Volley简单二次封装代码

最近在接触Volley,个人觉得,该框架确实简化了http请求。使用起来很简单。为了加深理解,在慕课网看了关于简单二次封装的视频,将其中的代码简单的写了一下。二话不说直接上代码。 Myapplication: public class Myapplication extends Application { public static RequestQueue queue; p

过程就是奖励 288

Volley简单封装及使用

这是一个volley封装的demo,封装思路来自一个同事,我做了一点简单的修改。网络请求的实现类:public class BaseRequest { public static void StringRequestPost(final Context mContext, final int id, final String url, ...

majima的博客 444

Volley的简单的二次回调封装

对Volley的简单的二次回调封装 1、新建一个VolleyInterface类public abstract class VolleyInterface { public Context mContext; public static Response.Listener mListener; public static Response.ErrorListener m

时代新人的博客 984

关于volley的简单封装并附带文件缓存

关于Volley的简单封装 在Android开发中,volley几乎人人都会用(可能有些大神网络请求框架是自己写的,我就不知道了,没接触过),毕竟官方的东西,强大之处不多说,源码有多高能我也不说了,网上很多前辈的分析; 这里主要的就是降Volley封装成工具类,方便日常使用;注:json解析我用的是GSON,这个可以根据个人喜好自己选,反正都一样;主要用到的:StringRequest,接口回调

Gaara_lee的专栏 1131

Volley简单封装--笔记

Volley简单封装 封装只是为了自我代码的高效与整洁 package com.czz.testhttp; import android.content.Context; import android.util.Log; import com.android.volley.AuthFailureError; import com.android.volley.Request; import

fydsw1314的专栏 2698

Volley的简单二次封装

新建一个application 1 package com.honghe.myvolley.app; 2 3 import com.android.volley.RequestQueue; 4 import com.android.volley.toolbox.Volley; 5 6 import android.app.Application; 7 8 ...

weixin_34259159的博客 81

Volley网络请求的简单封装使用

Volley提供了JsonObjectRequest、JsonArrayRequest、StringRequest等Request形式。 JsonObjectRequest:返回JSON对象。 JsonArrayRequest:返回JsonArray。 StringRequest:返回String,这样可以自己处理数据,更加灵活。 这里我就把StringRequest简单进行二次封装,方便

zane_xiao的博客 878

Volley的使用(三) 简单封装

1、建立自定义类2、建立接口1、 建立自定义类: VolleyRequest.javapublic class VolleyRequest { public static StringRequest stringRequest; public static Context context; public static void RequestGet(

秦时明月 2677

Volley的简单二次封装(个人笔记)

1.最重要最容易忽略的“注册”,在AndroidManifest中输入 name。 例如:android:name=".Volley.VolleyApplication" 2.创建3个类 ① public class NetworkUtils { private static NetworkUtils networkUtils; public static NetworkUtils getNetworkUtils() { if (networkUtils == null)

fanketly的博客 384
上一篇: Android提交自己的作品到GitHub上
下一篇: 判断viewpager左右滑动方向
diebing0439
博客等级 码龄11年 0粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值