为什么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相关推荐

  1. 代理模式 委派模式 策略模式_设计模式 - 委派模式

    理解 首先委派模式不属于23种设计模式. 所谓委派,个人理解是:将为达到最终结果的事情交给其他人或中间人来干,我只要最终结果,其他的事情,由我委派的人来安排. 更直白的表达就是,比如,我们想要盖一栋楼 ...

  2. 使用模式创建一个面向服务的组件中间件

    引言 在本文中,您将了解面向服务的组件中间件在用于资源有限的语音设备时,在设计阶段所应用的模式.它涵盖了项目的问题上下文,并被看成是一组决定因素,是对相关体系结构远景的一个简要概括.您还会得到一份描述 ...

  3. 类加载器双亲委派模式

    双亲委派模型的工作流程是:如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把请求委托给父加载器去完成,依次向上,因此,所有的类加载请求最终都应该被传递到顶层的启动类加载器中,只 ...

  4. 设计模式之委派模式及适配器模式

    委派模式: 委派模式不属于23种设计模式, 主要角色有三种: 抽象任务角色, 委派者角色, 具体任务角色.实现层面上, 定义一个抽象接口, 它有若干实现类, 他们真正执行业务方法, 这些子类是具体任务 ...

  5. java设计模式之委派模式

    1.什么是委派模式 委派模式不属于 23 种设计模式之一,是面向对象设计模式中常用的一种模式. Spring MVC框架中的DispatcherServlet其实就用到了委派模式. 这种模式的原理为类 ...

  6. 委派模式与策略模式综合应用

    在上面的代码中我们列举了非常几个业务场景,相信小伙伴对委派模式和策略模式有了非常深刻的理解了.现在,我们再来回顾一下,DispatcherServlet 的委派逻辑,代码如下: private voi ...

  7. 此计算机必须为委派而被信任_如何增强 ClassLoader 双亲委派模式 ?

    双亲委派模式 JVM加载类的实现方式,我们称为 双亲委托模型: 如果一个类加载器收到了类加载的请求,他首先不会自己去尝试加载这个类,而是把这个请求委托给自己的父加载器,每一层的类加载器都是如此,因此所 ...

  8. 一篇博客读懂设计模式之---委派模式

    一篇博客读懂设计模式之-委派模式 委派模式可能大家听起来不太熟悉,但是在代码开发的时候却很好用,下面从几个方面来介绍一下 what:是什么? 委派模式:顾名思义,委托其他对象或者实例来帮我们完成任务, ...

  9. Linux下的设计模式——委派模式(Delegate Pattern)深入浅出【建议新手收藏】

    前言:学习目标:精简程序逻辑,提升代码的可读性.内容定位:希望通过对委派模式的学习,让自己写出更加优雅的代码的人群. 一.委派模式定义 委派模式(Delegate Pattern)的基本作用是负责任务 ...

最新文章

  1. 带有en的单词有哪些_en为前缀的单词
  2. prometheus简介
  3. Node+Vue实现对数据的增删改查
  4. 超简单让.NET Core开发者快速拥有CI/CD的能力-Docker版本
  5. AndroidJava try-catch-finally正确用法
  6. 10_隐马尔科夫模型HMM1_统计学习方法
  7. Service层抽象规范
  8. 乒乓球单循环赛_乒乓球单循环赛
  9. 大三老狗的前端实习半年心得-经验分享
  10. 做了这么多年的技术,你有写过博客吗?
  11. AntDesign Vue 中时间段选择器a-range-picker
  12. Silverlight 教程第二部分:使用布局管理 (木野狐译)
  13. 公司被告,晋升受阻,为刷考评互拆台...这届FB员工太难了
  14. 2020 年度开发者工具 Top 100 名单!
  15. Second-Order Cone Programming(SOCP) 二阶锥规划
  16. 战地1 服务器 网页,战地1全服务器搜索方法一览
  17. python爬虫(抓取百度新闻列表)
  18. decorate怎么读(decorated怎么读)
  19. 一感冒就得红眼病,而且很严重怎么办
  20. ubantu 安装显卡

热门文章

  1. 人均年薪250万, 拥有400名博士, 这家AI公司去年亏27亿
  2. 个性化推荐系统研究热点之用户画像
  3. 如何理解矩阵的特征向量和特征值?
  4. 自然语言处理NLP国内研究方向机构导师
  5. SAP HUM 如何把HU号码与Outbound Delivery 解除Assignment?
  6. 多角度回顾因果推断的模型方法
  7. 人工智能vs人类智能小传
  8. Nature:实验室培育的大脑可以拥有意识吗?
  9. 华为发布《自动驾驶网络解决方案白皮书》
  10. 编译 | 5G时代的游戏世界:一年后的AR与VR将会发生的几个变化