当前位置: 首页 > news >正文

【Android学习】RxJava

文章目录

  • 资料连接
  • 1. Merge & Zip操作符: 合并数据源
  • 2. Map & FlapMap & ConcatMap & Buffer: 变换操作符
  • 3. retry & retryUntil & retryWhen : 错误处理操作符
  • 4. Transformer & Compose 转换符

资料连接

Android RxJava: 这是一份全面的 操作符 使用汇总 (含详细实例讲解)

1. Merge & Zip操作符: 合并数据源

Android RxJava应用:合并数据源
在这里插入图片描述

2. Map & FlapMap & ConcatMap & Buffer: 变换操作符

Android RxJava应用:变换操作符
在这里插入图片描述

3. retry & retryUntil & retryWhen : 错误处理操作符

  • retry
    retry(): 让被观察者重新发射数据,要是一直错误就一直发送了
    retry(BiPredicate): interger是第几次重新发送,Throwable是错误的内容
    retry(long time): 最多让被观察者重新发射数据多少次
    retry(long time,Predicate predicate): 最多让被观察者重新发射数据多少次,在predicate里面进行判断拦截 返回是否继续
    retry(Predicate predicate): 在predicate里面进行判断拦截 返回是否继续
  • retryUntil
    具体使用类似于retry(Predicate predicate),唯一区别:返回 true 则不重新发送数据事件。此处不作过多描述
  • retryWhen
  • 遇到错误时,将发生的错误传递给一个新的被观察者(Observable),并决定是否需要重新订阅原始被观察者(Observable)& 发送事件
    注意:
    retryWhen 通过 flatMap 返回的 Observable.just(1) 仅仅作为一个信号(同样会被onNext方法捕获),触发了原始的 Observable 重新订阅,从而重新执行 onNext(1) 和 onNext(2)
Observable.create(new ObservableOnSubscribe<Integer>() {@Overridepublic void subscribe(ObservableEmitter<Integer> e) throws Exception {e.onNext(1);e.onNext(2);e.onError(new Exception("发生错误了"));e.onNext(3);}})// 遇到error事件才会回调.retryWhen(new Function<Observable<Throwable>, ObservableSource<?>>() {@Overridepublic ObservableSource<?> apply(@NonNull Observable<Throwable> throwableObservable) throws Exception {// 参数Observable<Throwable>中的泛型 = 上游操作符抛出的异常,可通过该条件来判断异常的类型// 返回Observable<?> = 新的被观察者 Observable(任意类型)// 此处有两种情况:// 1. 若 新的被观察者 Observable发送的事件 = Error事件,那么 原始Observable则不重新发送事件:// 2. 若 新的被观察者 Observable发送的事件 = Next事件 ,那么原始的Observable则重新发送事件:return throwableObservable.flatMap(new Function<Throwable, ObservableSource<?>>() {@Overridepublic ObservableSource<?> apply(@NonNull Throwable throwable) throws Exception {// 1. 若返回的Observable发送的事件 = Error事件,则原始的Observable不重新发送事件// 该异常错误信息可在观察者中的onError()中获得return Observable.error(new Throwable("retryWhen终止啦"));// 2. 若返回的Observable发送的事件 = Next事件,则原始的Observable重新发送事件(若持续遇到错误,则持续重试)// return Observable.just(1);}});}}).subscribe(new Observer<Integer>() {@Overridepublic void onSubscribe(Disposable d) {}@Overridepublic void onNext(Integer value) {Log.d(TAG, "接收到了事件"+ value  );}@Overridepublic void onError(Throwable e) {Log.d(TAG, "对Error事件作出响应" + e.toString());// 获取异常错误信息}@Overridepublic void onComplete() {Log.d(TAG, "对Complete事件作出响应");}});

4. Transformer & Compose 转换符

Transformer 在RxJava中的使用

  • 定义
    Transformer 是一个接口,用于创建一个操作符,可以将一个 Observable 转换为另一个 Observable。通常,Transformer 是通过实现 ObservableTransformer<T, R> 接口来创建的。
  • 使用场景
    当你需要在多个地方重用相同的操作链时,使用 Transformer 可以将一系列操作封装成一个可复用的单元。
  • 代码
public class MyTransformer<T> implements ObservableTransformer<T, T> {@Overridepublic ObservableSource<T> apply(Observable<T> upstream) {return upstream.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).map(value -> value + " transformed");}
}// 使用
observable.compose(new MyTransformer<>()).subscribe(...);

在这里插入图片描述

http://www.lryc.cn/news/503799.html

相关文章:

  • Pycharm访问MySQL数据库·上
  • 【CUDA】CUBLAS
  • YOLOv8-ultralytics-8.2.103部分代码阅读笔记-predict.py
  • 细说Flash存储芯片W25Q128FW和W25Q16BV
  • python爬虫--小白篇【爬取B站视频】
  • Three.js入门-模型加载
  • ECharts实现数据可视化入门详解
  • C++(举例说明类的实例化方式)
  • LeetCode32. 最长有效括号(2024冬季每日一题 32)
  • Textfocals ——基于大言模型的用户驱动型文本改进工具让用户在审阅自己的写作时对其进行修改
  • docker 部署 redis
  • 微信小程序横屏页面跳转后,自定义navbar样式跑了?
  • 回归预测 | MATLAB实现BiGRU(双向门控循环单元)多输入单输出
  • 智能时代的基石:神经网络
  • 红与黑,,
  • 嵌入式驱动开发详解16(音频驱动开发)
  • 【嵌入式软件】跑开发板的前置服务配置
  • 如何高效实现进程间通信
  • scala基础学习_变量
  • Java 身份证校验工具类(15位校验、18位校验与15转18)
  • HTML+CSS+Vue3的静态网页,免费开源,可当作作业使用
  • 【FAQ】HarmonyOS SDK 闭源开放能力 —Push Kit(8)
  • HCIA-Access V2.5_2_2_2网络通信基础_IP编址与路由
  • 音频客观测评方法PESQ
  • 前后端分离的项目使用nginx 解决 Invalid CORS request
  • 回归预测 | MATLAB实现SVM-Adaboost集成学习结合支持向量机多输入单输出回归预测
  • 常见排序算法总结 (五) - 堆排序与堆操作
  • kubernetes的三种探针ReadinessProbe、LivenessProbe和StartupProbe,以及使用示例
  • 掌握线性回归:从简单模型到多项式模型的综合指南
  • Java:183 基于SSM的高校食堂系统