通过委派模式包装一个RxJavaCallAdapterFactory
为什么80%的码农都做不了架构师?>>>
通过委派模式包装一个RxJavaCallAdapterFactory
标签(空格分隔): RxJava Retrofit CallAdapter
实现是厌倦了写很多重复的代码了。
最近项目使用RxJava(RxAndroid)和Retrofit搭配做网络请求。有一段代码经常重复,
service.XXX().subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(httpResp -> {... 这里是一些处理结果前的常规操作... 这里处理结果... 这里是一些处理结果后的常规操作},throwable -> {... 这里是一些处理错误前的常规操作... 这里处理错误... 这里是一些处理错误后的常规操作});
其实上面的代码中,重要的就只有server.XXX()和“处理结果”、“处理错误”两个三行。其他的都是一些常规性的代码,在其他地方也重复的写着。因为之前没有想到很好的组织方式,就一直放着没有整理。但是,写得多的时候就烦了,于是就写了下面一个类。
public class MyRxJavaCallAdapterFactory implements CallAdapter.Factory {private RxJavaCallAdapterFactory mFactory;private MyRxJavaCallAdapterFactory() {mFactory = RxJavaCallAdapterFactory.create();}public static MyRxJavaCallAdapterFactory create() {return new MyRxJavaCallAdapterFactory();}@Overridepublic CallAdapter<?> get(Type returnType, Annotation[] annotations, Retrofit retrofit) {CallAdapter<?> a = mFactory.get(returnType, annotations, retrofit);if (a == null) {return null;} else {CallAdapter<Observable<?>> adapter = (CallAdapter<Observable<?>>) a;return new MyCallAdapter(adapter);}}private class MyCallAdapter implements CallAdapter<Observable<?>> {private CallAdapter<Observable<?>> mAdapter;MyCallAdapter(CallAdapter<Observable<?>> adapter) {this.mAdapter = adapter;}@Overridepublic Type responseType() {return mAdapter.responseType();}@Overridepublic <R> Observable<?> adapt(Call<R> call) {Observable<?> observable = mAdapter.adapt(call);return observable.compose(o -> {// 有点尴尬,很多情况下,网络请求是在onCreate的时候就创建了。// 而load事件的监听却是在onResume。EventBus.getInstance().send(new LoadingStartEvent());return o;}).lift(subscriber -> {Subscriber temp = new Subscriber() {@Overridepublic void onCompleted() {subscriber.onCompleted();}@Overridepublic void onError(Throwable e) {subscriber.onError(e);EventBus.getInstance().send(new LoadingStopEvent());}@Overridepublic void onNext(Object o) {subscriber.onNext(o);EventBus.getInstance().send(new LoadingStopEvent());}};return temp;})// 下面两句先不要开放,因为有些地方需要同步请求。
// .subscribeOn(Schedulers.io())
// .observeOn(AndroidSchedulers.mainThread());}}}
好困,不想排版了。睡觉去。
转载于:https://my.oschina.net/atanl/blog/604336
通过委派模式包装一个RxJavaCallAdapterFactory相关推荐
- 代理模式 委派模式 策略模式_设计模式 - 委派模式
理解 首先委派模式不属于23种设计模式. 所谓委派,个人理解是:将为达到最终结果的事情交给其他人或中间人来干,我只要最终结果,其他的事情,由我委派的人来安排. 更直白的表达就是,比如,我们想要盖一栋楼 ...
- 使用模式创建一个面向服务的组件中间件
引言 在本文中,您将了解面向服务的组件中间件在用于资源有限的语音设备时,在设计阶段所应用的模式.它涵盖了项目的问题上下文,并被看成是一组决定因素,是对相关体系结构远景的一个简要概括.您还会得到一份描述 ...
- 类加载器双亲委派模式
双亲委派模型的工作流程是:如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把请求委托给父加载器去完成,依次向上,因此,所有的类加载请求最终都应该被传递到顶层的启动类加载器中,只 ...
- 设计模式之委派模式及适配器模式
委派模式: 委派模式不属于23种设计模式, 主要角色有三种: 抽象任务角色, 委派者角色, 具体任务角色.实现层面上, 定义一个抽象接口, 它有若干实现类, 他们真正执行业务方法, 这些子类是具体任务 ...
- java设计模式之委派模式
1.什么是委派模式 委派模式不属于 23 种设计模式之一,是面向对象设计模式中常用的一种模式. Spring MVC框架中的DispatcherServlet其实就用到了委派模式. 这种模式的原理为类 ...
- 委派模式与策略模式综合应用
在上面的代码中我们列举了非常几个业务场景,相信小伙伴对委派模式和策略模式有了非常深刻的理解了.现在,我们再来回顾一下,DispatcherServlet 的委派逻辑,代码如下: private voi ...
- 此计算机必须为委派而被信任_如何增强 ClassLoader 双亲委派模式 ?
双亲委派模式 JVM加载类的实现方式,我们称为 双亲委托模型: 如果一个类加载器收到了类加载的请求,他首先不会自己去尝试加载这个类,而是把这个请求委托给自己的父加载器,每一层的类加载器都是如此,因此所 ...
- 一篇博客读懂设计模式之---委派模式
一篇博客读懂设计模式之-委派模式 委派模式可能大家听起来不太熟悉,但是在代码开发的时候却很好用,下面从几个方面来介绍一下 what:是什么? 委派模式:顾名思义,委托其他对象或者实例来帮我们完成任务, ...
- Linux下的设计模式——委派模式(Delegate Pattern)深入浅出【建议新手收藏】
前言:学习目标:精简程序逻辑,提升代码的可读性.内容定位:希望通过对委派模式的学习,让自己写出更加优雅的代码的人群. 一.委派模式定义 委派模式(Delegate Pattern)的基本作用是负责任务 ...
最新文章
- 带有en的单词有哪些_en为前缀的单词
- prometheus简介
- Node+Vue实现对数据的增删改查
- 超简单让.NET Core开发者快速拥有CI/CD的能力-Docker版本
- AndroidJava try-catch-finally正确用法
- 10_隐马尔科夫模型HMM1_统计学习方法
- Service层抽象规范
- 乒乓球单循环赛_乒乓球单循环赛
- 大三老狗的前端实习半年心得-经验分享
- 做了这么多年的技术,你有写过博客吗?
- AntDesign Vue 中时间段选择器a-range-picker
- Silverlight 教程第二部分:使用布局管理 (木野狐译)
- 公司被告,晋升受阻,为刷考评互拆台...这届FB员工太难了
- 2020 年度开发者工具 Top 100 名单!
- Second-Order Cone Programming(SOCP) 二阶锥规划
- 战地1 服务器 网页,战地1全服务器搜索方法一览
- python爬虫(抓取百度新闻列表)
- decorate怎么读(decorated怎么读)
- 一感冒就得红眼病,而且很严重怎么办
- ubantu 安装显卡