android 使用代理模式切换不同的框架

Android 无缝切换不同网络请求框架 最近在学习网易公开课,里面有很多大牛分享,这次代码基本是把学习视频代码重敲了一边,同时为了加强对kotlin语言使用,后期写代码都将切到kotlin语言。 最好的语言是用图来描述,所以我还是通过画图和代码来讲解一下原理。 架构介绍: 1.这个架构还是很简单的,如上图有一个公共接口IHttpProcess,里面只有一个post网络请求方法,该接口在HttpHelper,VolleyProc... 阅读详情

我们平时在开发迭代中,随着版本的更新以及需求的变化,可能这时候框架不能达到我们的要求,而这个时候另外有个框架可以达到,那我们如果要换的框架的话,这会涉及很多代码要改动,比如网络框架最早是用xutils,然后volley,现在大部分用的是okhttp,那么我们怎么用一行代码把app项目中的网络请求从volley切换到okhttp呢?而不是去全局改动代码,这样工作量就大了,今天就解决这个问题.   其实就是把请求抽象出来,然后利用java的多态根据设置的是用那个请求就行了.

public interface IHttpRequest {
    public void get(String url, Map<String,Object> params,ICallBack iCallBack);
    public void post(String url, Map<String,Object> params,ICallBack iCallBack);
}

这是抽取出来的,这里我们使用静态代理的方式:

public class HttpRequestProxy implements IHttpRequest {
    private static IHttpRequest iHttpRequest;

    private HttpRequestProxy() {
    }

    private static class Holder {
        private static final HttpRequestProxy INSTANCE = new HttpRequestProxy();
    }

    public static HttpRequestProxy getInstance() {
        return Holder.INSTANCE;
    }

    public void init(NetRequestType netRequestType) {
        switch (netRequestType) {
            case OKHTTP:
                iHttpRequest = new OkHttpRequest();
                break;
            case XUTIL:
                iHttpRequest = new XUtilsRequest();
                break;
            case VOLLEY:
                iHttpRequest = new VolleyRequest();
                break;
        }
    }

    @Override
    public void get(String url, Map<String, Object> params, ICallBack iCallBack) {
        if (null != iHttpRequest)
            iHttpRequest.get(url, params, iCallBack);
    }

    @Override
    public void post(String url, Map<String, Object> params, ICallBack iCallBack) {
        if (null != iHttpRequest)
            iHttpRequest.post(url, params, iCallBack);
    }
}

然后其实我们只要针对不同的网络请求设置进来就ok了,比如使用Okhttp:

public class OkHttpRequest implements IHttpRequest {
    @Override
    public void get(String url, Map<String, Object> params, ICallBack iCallBack) {
        if(TextUtils.isEmpty(url)){
            return;
        }
        StringBuffer stringBuffer = new StringBuffer(url);
        if(null!=params&&!params.isEmpty()){
            stringBuffer.append("?");
            for (Map.Entry<String, Object> entry : params.entrySet()) {
                stringBuffer.append(entry.getKey()).append("=").append(entry.getValue().toString()).append("&");
            }
            stringBuffer.deleteCharAt(stringBuffer.length()-1);
        }
        OkHttpClient client = new OkHttpClient();
        Log.e("OkHttpRequest","url="+stringBuffer.toString());
        Request request = new Request.Builder().get().url(stringBuffer.toString()).build();
        Call call = client.newCall(request);
        //异步调用并设置回调函数
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
            }
            @Override
            public void onResponse(Call call, final Response response) throws IOException {
                if(response.isSuccessful()){
                     String json = response.body().string();
                     Log.e("OkHttpRequest","json--->"+json);
                }
            }
        });
    }
    @Override
    public void post(String url, Map<String, Object> params, ICallBack iCallBack) {

    }
}

如果是volley的话,也是这么搞定的,其实就是里层封装好了,上层根据不同的需求,切换下就行了,在这还有请求回调以及json变成实体bean的

public interface ICallBack {
     void onSuccess(String json);
     void onFail(Exception e);
}

在这把所有的请求结果全都是string,当然你也可以定义其他了,

public abstract class HttpCallBack<Result> implements ICallBack {
    @Override
    public void onSuccess(String json) {
        Gson gson = new Gson();
        Class<?> clazz = getClassType(this);
        Result obj = (Result) gson.fromJson(json,clazz);
        onSuccess(obj);
    }
    public abstract void onSuccess(Result obj);
    private Class<?> getClassType(Object object) {
        if(null==object){
            return null;
        }
        Type type = object.getClass().getGenericSuperclass();
        Type[] params = ((ParameterizedType)type).getActualTypeArguments();
        return (Class<?>) params[0];
    }

    @Override
    public void onFail(Exception e) {

    }
}

在这只是对返回结果的一种处理而已,当我们要进行切换的时候,只要在Application中调用一行代码:

public class MyApp extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        HttpRequestProxy.getInstance().init(NetRequestType.OKHTTP);
    }
}

这就是网络框架的切换.这是架构师必懂的啊,可惜我是菜鸟!

上层调用:

Map<String,Object> params = new HashMap<>();
params.put("key","71e58b5b2f930eaf1f937407acde08fe");
params.put("num",20);
HttpRequestProxy.getInstance().get("http://api.tianapi.com/social/", params, new HttpCallBack<Personal>() {
    @Override
    public void onSuccess(Personal personal) {

    }
    @Override
    public void onFail(Exception e) {
        super.onFail(e);
    }
});

轻松设置代理(EasyProxy) 是一个非常简单易用的代理服务器搜索及验证软件 立即下载

相关推荐

2019-06.zip(http代理工具,可以使用它在不同的情况下随意切换网络。)

http代理工具,可以使用它在不同的情况下随意切换网络。

代理在Android中的应用,一行代码实现网络框架的切换

代理的定义:给目标对象提供一个代理对象,并由代理对象控制对目标对象的引用。 开闭原则:代码的功能是开放的,对于已经写好的代码要做到关闭 下面介绍的这个案例是访问网络的代理实现 HttpProxy类是访问网络的代理,具体的被代理对象是VolleyModel 和 OkHttpModel 切换网络框架只要在MyAppcation中修改一行代码就ok,实现了编码的开闭原则 public void onCreate() { super.onCreate(); context = ge

weixin_39413778的博客 545

代理模式在android中使用

代理设计模式是对象的结构模式,原理就是给某个对象提供一个代理对象,并由代理对象来控制对愿对象的引用。在有些情况下,一方不能或不想直接引用一个对象,而代理对象可以在双方之间起到中介的作用,这样可以大大降低彼此的耦合关系,提高彼此的灵活性。

代理模式--如何快速切换APP的三方框架

文章目录定义简单说明快速切换网络框架设计1. 通用规则设计2. 具体的代理对象3. 对通用规则适配的三方框架4. 调用方的使用及切换Demo App开发过程中,会涉及到很多三方支持组件的使用,比如网络框架,在重度依赖某框架的情况下,一旦发生不得不进行的替换,所带来的工作量将是巨大的,而如果前期对第三方的使用进行了代理控制,我们所做的工作将会大量减轻 定义 代理模式(Proxy):为其他对象提供一种...

微光 484

CUBEMX ADC 单/多通道+DMA

本文使用的是STM3F103C8T6 Cubemx进行单/多通道DMA配置。

记录学习 1403

nRF52840 低功耗蓝牙开发指南:从硬件架构到物联网应用实战

本文深入解析nRF52840低功耗蓝牙芯片的硬件架构与开发实践,涵盖从开发环境搭建到BLE协议栈开发的详细指南。通过实战案例分享低功耗优化技巧,帮助开发者高效实现物联网应用,特别适合智能家居和工业场景。

d3e4f的博客 419

Android与设计模式——代理(Proxy)模式

在阎宏博士的《JAVA与模式》一书中开头是这样描述代理(Proxy)模式的:   代理模式是对象的结构模式。代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。 代理模式的结构。   所谓代理,就是一个人或者机构代表另一个人或者机构采取行动。在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。   代理模式类图如下

东哥日记 2675

大数据知识面试题-通用(2026版)

序列号 内容 链接 1 大数据知识面试题-通用(2022版) 待续… 2 大数据知识面试题-Hadoop(2022版) 待续… 3 大数据知识面试题-MapReduce和yarn(2022版) 待续… 4 大数据知识面试题-Zookeepr (2022版) 待续… 5 大数据知识面试题-Hive (2022版) 待续… 6 大数据知识面试题-Flume(2022版) 待续… 7 大数据知识面试题-Hbase(2022版) 待续… 8 大数据知识面试题-sqoop(....

拉格朗日的学习笔记 2万+

easy代理android,一套快速高效的开发框架EasyAndroid

原标题:一套快速高效的开发框架EasyAndroid类库介绍 EasyAndroid现在Android的框架很多,第三方库也很多,当做一个项目的时候,会考虑怎么整合那么多的资源,以达到复用快速开发。今天要说的这个框架就是整合了主流Retrofit2网络层封装、Fresco图片加载、都使用OKHTTP3进行网络处理、使用MVP架构,来快速灵活开发复用我们的项目。框架说明Retrofit2为什么要使用...

weixin_35231842的博客 308

微信小程序推广策略,打开小程序领域流量大门

本文旨在为小程序开发者、运营者和企业主提供一套完整的微信小程序推广策略体系,帮助他们在竞争激烈的小程序生态中获得更多流量和用户。内容涵盖从0到1的冷启动策略,到成熟期的增长技巧。本文将首先介绍小程序的基础推广设置,然后深入探讨各种流量获取渠道,接着分析数据驱动的优化方法,最后展望未来发展趋势。小程序:无需下载安装即可使用的应用,运行在微信生态内:独立访客数:页面浏览量转化率:完成目标行为的用户比例留存率:用户在一定时间后仍活跃的比例自然流量获取:通过优化搜索、完善资料等方式获得基础流量社交裂变。

小程序开发 1031

【Android逆向工程】第18章:Ollvm 混淆与对抗

本章介绍了Ollvm混淆技术及其对抗方法。Ollvm是基于LLVM的开源代码混淆工具,主要实现控制流平坦化、虚假控制流和指令替换三种混淆技术。控制流平坦化通过状态变量和switch-case结构隐藏真实控制流,将原本清晰的逻辑拆分为多个状态块。混淆后的代码在静态分析中难以理解,但可通过动态追踪执行路径、符号执行等方法来还原原始逻辑。本章还提供了混淆代码示例和对抗策略,帮助理解Ollvm的工作原理及其防御方法。

w987333120的博客 213

Android 通用网络框架封装

随着我们Android不断的发展, 网络框架亦是层出不穷,亦是在不断进步之中。

jianjiaqqq001的专栏 1509

Openclaw 附录B 常用Skills清单

核心作用支持URL、网页、PDF、图片、音频和YouTube视频的摘要与字幕提取,由OpenClaw创始人@steipete开发的官方内置Skill。安装⚠️说明:原推荐的summarize未在ClawHub验证到,YouTube字幕提取功能已内置于summarize中。使用场景“提取这个2小时Next.js教程视频的核心代码逻辑,按章节整理成学习笔记”推荐指数:⭐⭐⭐⭐。

Maynor的博客 858

5-1-1.代理模式--如何快速切换APP的三方框架

App开发过程中,会涉及到很多三方支持组件的使用,比如网络框架,在重度依赖某框架的情况下,一旦发生不得不进行的替换,所带来的工作量将是巨大的,而如果前期对第三方的使用进行了代理控制,我们所做的工作将会大量减轻————————————————————代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问在使用该设计模式过程中,主要涉及三个对象:调用方,支持方,代理支持方。以网络框架为例,App作为调用方需要网络请求,三方框架作为支持方提供请求功能,如果不使用代理支持方的话,app将调用具体的某一

bugyinyin的博客 279

端侧 AI 落地避坑指南(中):为什么 QAT 救不了精度?——对齐“融合后算子“的硬件物理约束

在上一篇文章中,我们深入探讨了量化的本质,并得出结论:QAT(量化感知训练)是保持精度的关键。明明做了 QAT,精度还是崩塌了!让我们看一个真实的案例:✅ 使用了✅ 配置了量化✅ 训练了 50 个 epoch,学习率降为原来的 1/10✅ 冻结了 BN 统计量FP32 模型:mAP = 0.85QAT 后 FP32:mAP = 0.84(正常)工具量化后:mAP = 0.68(崩塌!问题出在哪里?层融合(Layer Fusion)机制。

weixin_51988935的博客 55

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Android常见设计模式——代理模式(Proxy Pattern)(二)

文章目录1. 前言2. 远程代理(Remote Proxy)3. 后记 1. 前言 在上篇Android常见设计模式——代理模式(Proxy Pattern)中基本上知道了什么是代理模式,以及对应的应该如何写代理模式的代码,了解了在Retrofit中没有被代理者的代理模式。在这篇中将继续围绕代理模式进行展开。在《Android源码设计模式》一书中提到:静态代理和动态代理是从编码的角度来区分代理模式的方式,同时也可以从其使用范围来区分不同类型的代理模式: 远程代理(Remote Proxy):为某个对象在不

梦否 1285

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

代理模式(Proxy Pattern):简单&粗暴解析

1.前言 在之前的文章设计模式(Design pattern):简单&amp;粗暴解析中已经为大家深入浅出解析了 设计模式 的 七大原则、三大类型。 本文为大家解析三大类型中 结构型 里其中的 代理模式。 文章中实例&nbsp; linhaojian的Github 2.目录 3.含义 一个类代表另一个类的功能。 4.解决 1.目标对象与访问者高度耦合 &amp; 难扩展的问题。...

qwe851023的博客 250

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Android开源框架:Retrofit

A type-safe HTTP client for Android and Java. Retrofit 是基于RESTful风格的 HTTP 网络请求框架的封装。它的底层仍然基于OkHttp实现,算是OkHttp在Android上使用的改良。 2 为什么会有Retrofit框架 OkHttp是安卓官方认证的网络请求框架,非常强大,但是它也有不少缺点,如下。所以为了解决这些缺点,让网络请求在Android开发上易用,诞生了Retrofit框架,它本质上就也就是在OkHttp上套了层“壳子”,里面的请求还

Eqiqi的博客 3042

Android-skin-support换肤框架原理

文章目录AppcompatActivity源码解析创建AppCompatView过程解析 AppcompatActivity源码解析 AppcompatActivity的功能不仅仅是帮我们加了一个ActionBar(绝大部分时候还不需要),还有一个功能是 Built-in switching between light and dark themes by using the androidx.appcompat.R.style#Theme_AppCompat_DayNight theme and App

weixin_44631241的博客 557

实现Android主流网络框架封装,可无缝侵入切换框架

版权声明:本文为博主原创文章,未经博主允许不得转载。juejin.im/post/5bcee5… 转载请标明出处:juejin.im/post/5bcee5… 本文出自 AWeiLoveAndroid的博客 juejin.im/user/5a07c6… 一、项目中经常会用到图片加载框架,关于框架使用,在开发中会遇到以下几种情况: 1.时间紧任务重,来不及去重构项目。 2.项目很老,接手的人很多,不...

weixin_34294649的博客 615

如何调用 Android 隐藏系统服务?BinderWrapper 代理模式在 PI 中的实战解析

PI 是一个面向 Android 10 ~ 17 的轻量包管理器应用,它通过 BinderWrapper 代理模式调用 Android 隐藏系统服务(如 `ServiceManager.getService`),借助 Shizuku、Dhizuku 或 Root 权限,绕过常规权限限制完成应用安装、卸载等高级操作。本文带你完整拆解这套代理机制的设计与实现。 ## 一、为什么需要"隐藏系统服务"?

gitblog_00707的博客 449

Android开源框架:Retrofit详解

ServiceMethod就像是一个中央处理器,传入Retrofit对象和Method对象,调用各个接口和解析器,最终生成一个Request,包含api 的域名、path、http请求方法、请求头、是否有body、是否是multipart等等。Retrofit的源码十分优秀,用注解的形式组合HTTP请求,通过代理接口,处理请求的逻辑,最后再执行请求。熟悉设计模式的都知道,代理模式的思想是通过一个“代理商”,让”用户“通过它处理难以处理的”事情“。它请求实现的核心在于“注解”、“动态代理”、“反射”。

sgy645148995的博客 680

telephony framework中的代理模式

Android telephony framework中有Phone.java,PhoneBase.java, GsmPhone.java(或者CdmaPhone), PhoneProxy.java 其中Phone是接口类,剩余三个类都实现了Phone接口,只不过是作用不一样。PhoneBase实现了一些通用的接口;GsmPhone和CDMAPhone,两者层次是对等的,只不过一个实现符合Gsm

firedancer0089的专栏 806

android十大开源框架

1-1 课程导学 第2章 Okhttp网络库深入解析和相关面试题分析 本章主要先通过分析OKhttp的简单使用,对于OKhttp的调度器、拦截器、缓存策略、连接池等进行了相应的源码和原理分析,并对于socket、websocket、http缓存、多线程下载、文件下载、https等经典Android面试题进行分析。 2-1 okhttp框架流程分析 2-2 okhttp同步请求方法 2-3...

落岑博客 2810

项目中如何实现一键快速切换sp到mmkv

最近看到很多博客都在分享sp的前世今生问题,或者说mmkv性能的优越,很少有介绍,在实际开发中实现一键快速切换sp到mmkv或者后面谷歌推出的DataStore; 今天我从架构层面实现一键快速切换sp到mmkv或者DataStore; 需求:我希望在业务代码使用后,后期替换新的框架就不用动业务逻辑代码,只需要配置下就可以切换我新的框架。 实现思路:我们可以考虑使用静态代理模式实现需要。 1:定义个顶层接口,接口里面定义抽象方法 2:再定义个实现类,实现接口里面的方法 3:再定义个代理类,代理类也

qq_36237165的博客 794
上一篇: android FragmentPagerAdapter与FragmentStatePagerAdapter的区别
下一篇: android 自定义view实现仿QQ运动步数进度效果
zhoushenxian
博客等级 码龄12年 453粉丝 549原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值