RxJava文档:https://github.com/ReactiveX/RxJava/wiki

RxJava中文文档:https://mcxiaoke.gitbooks.io/rxdocs/content

RxJava经典资料: https://github.com/lzyzsd/Awesome-RxJava

RxJava概念:

1:异步数据处理库 2:扩展的观察者模式

RxJava的特点:

1:小与1MB jar 2:轻量级框架 3:支持Java8 lambda 4:支持java6以上 Android2.3以上 4:支持同步异步

RxAndroid是什么:

RxAndroid是RxJava针对Android平台的一个扩展,用于Android开发。

观察者模式四大要素:

Observable被观察者

Observer观察者

subscribe订阅

event事件

操作符的分类

操作符的分类

Creating Observables(创建Observable)

Transforming Observables(转换Observable)

Filtering Observables(过滤Observable)

Combining Observables(组合Observable)

Error Handling Operators(处理错误)

创建类型操作符

1:Create 原始的创建操作符,使用一个函数从头开始创建一个Observable

注意点:1建议你在传递给create方法的函数中检查观察者的isUnsubscribed状态,以便在没有观察者的时候,让你的Observable停止发射数据或者做昂贵的运算。

2onError与onCompleted只能回调其中一个方法

//创建被观察者

Observable observable = Observable.create(new Observable.OnSubscribe(){

@Override

public void call(Subscriber subscriber) {

try {

if (!subscriber.isUnsubscribed()) {

subscriber.onNext("hello world!");

}

subscriber.onCompleted();

}catch (Exception e) {

subscriber.onError(e);

}

}

});

//创建观察者

Subscriber subscriber =new Subscriber() {

@Override

public void onCompleted() {

Log.i(TAG, "Completed");

}

@Override

public void onError(Throwable arg0) {

Log.i(TAG, "onError");

}

@Override

public void onNext(String arg0) {

Log.i(TAG, "onNext-> "+ arg0);

}

};

//订阅事件

observable.subscribe(subscriber);

运行结果:

2:Just 创建一个发射指定值的Observable,just将单个数据转换为发射那个数据的Observable。

注意点:如果你传递null给Just,它会返回一个发射null值的Observable。不要误认为它会返回一个空Observable(完全不发射任何数据的Observable),如果需要空Observable你应该使用Empty操作符。RxJava将这个操作符实现为just函数,它接受一至九个参数,返回一个按参数列表顺序发射这些数据的Observable。

//创建被观察者

Observable observable = Observable.just(1,2,3);

//创建观察者

Subscriber subscriber =new Subscriber() {

@Override

public void onCompleted() {

Log.i(TAG, "Completed");

}

@Override

public void onError(Throwable arg0) {

Log.i(TAG, "onError");

}

@Override

public void onNext(Integer arg0) {

Log.i(TAG, "onNext-> "+ arg0);

}

};

//订阅事件

observable.subscribe(subscriber);

运行结果:

3:From 将其它种类的对象和数据类型转换为Observable,当你使用Observable时,如果你要处理的数据都可以转换成展现为Observables,而不是需要混合使用Observables和其它类型的数据,会非常方便。这让你在数据流的整个生命周期中,可以使用一组统一的操作符来管理它们。

Integer[] items = {0, 1, 2, 3, 4, 5 };

//创建被观察者

Observable observable = Observable.from(items);

//创建观察者

Subscriber subscriber =new Subscriber() {

@Override

public void onCompleted() {

Log.i(TAG, "Completed");

}

@Override

public void onError(Throwable arg0) {

Log.i(TAG, "onError");

}

@Override

public void onNext(Integer arg0) {

Log.i(TAG, "onNext-> "+ arg0);

}

};

//订阅事件

observable.subscribe(subscriber);

运行结果:

4:Defer Defer操作符会一直等待直到有观察者订阅它,并且为每个观察者创建一个新的Observable

注意点:Defer操作符会一直等待直到有观察者订阅它,然后它使用Observable工厂方法生成一个Observable。它对每个观察者都这样做,因此尽管每个订阅者都以为自己订阅的是同一个Observable,事实上每个订阅者获取的是它们自己的单独的数据序列。在某些情况下,等待直到最后一分钟(就是知道订阅发生时)才生成Observable可以确保Observable包含最新的数据。

final String value ="RxJava学习笔记";

//创建被观察者

Observable observable = Observable.defer(new Func0>() {

@Override

public Observablecall() {

return Observable.just(value);

}

});

//创建观察者

Subscriber subscriber =new Subscriber() {

@Override

public void onCompleted() {

Log.i(TAG, "Completed");

}

@Override

public void onError(Throwable arg0) {

Log.i(TAG, "onError");

}

@Override

public void onNext(String arg0) {

Log.i(TAG, "onNext-> "+ arg0);

}

};

//订阅事件

observable.subscribe(subscriber);

运行结果:

5:Empty 创建一个不发射任何数据但是正常终止的Observable

//创建被观察者

Observable observable = Observable.empty();

//创建观察者

Subscriber subscriber =new Subscriber() {

@Override

public void onCompleted() {

Log.i(TAG, "Completed");

}

@Override

public void onError(Throwable arg0) {

Log.i(TAG, "onError");

}

@Override

public void onNext(Object arg0) {

Log.i(TAG, "onNext-> "+ arg0);

}

};

//订阅事件

observable.subscribe(subscriber);

运行结果:

6:Nerver 创建一个不发射数据也不终止的Observable

//创建被观察者

Observable observable = Observable.never();

//创建观察者

Subscriber subscriber =new Subscriber() {

@Override

public void onCompleted() {

Log.i(TAG, "Completed");

}

@Override

public void onError(Throwable arg0) {

Log.i(TAG, "onError");

}

@Override

public void onNext(Object arg0) {

Log.i(TAG, "onNext-> "+ arg0);

}

};

//订阅事件

observable.subscribe(subscriber);

运行结果:无

7:Throw 创建一个不发射数据以一个错误终止的Observable

//创建被观察者

Observable observable = Observable.error(new IllegalArgumentException("参数长度不是6位"));

//创建观察者

Subscriber subscriber =new Subscriber() {

@Override

public void onCompleted() {

Log.i(TAG, "Completed");

}

@Override

public void onError(Throwable arg0) {

Log.i(TAG, "onError");

}

@Override

public void onNext(Object arg0) {

Log.i(TAG, "onNext-> "+ arg0);

}

};

//订阅事件

observable.subscribe(subscriber);

运行结果:

8:Interval 创建一个按固定时间间隔发射整数序列的Observable

注意点:Interval操作符返回一个Observable,它按固定的时间间隔发射一个无限递增的整数序列。

//创建被观察者

//两个参数:

//第一个参数:代表两个消息发送之间的间隔时间(轮训时间)

//第二个参数:时间单位:(毫秒,秒,分钟) TimeUtil时间工具类

Observable observable = Observable.interval(4, TimeUnit.SECONDS);

//创建观察者

Subscriber subscriber =new Subscriber() {

@Override

public void onCompleted() {

Log.i(TAG, "Completed");

}

@Override

public void onError(Throwable arg0) {

Log.i(TAG, "onError");

}

@Override

public void onNext(Long arg0) {

Log.i(TAG, "onNext-> "+ arg0);

}

};

//订阅事件

observable.subscribe(subscriber);

运行结果:每隔4秒从0依次递增

//创建被观察者

//两个参数:

//第一个参数:八秒后轮训

//第二个参数:代表两个消息发送之间的间隔时间(轮训时间)

//第三个参数:时间单位:(毫秒,秒,分钟) TimeUtil时间工具类

Observable observable = Observable.interval(2,4, TimeUnit.SECONDS);

//创建观察者

Subscriber subscriber =new Subscriber() {

@Override

public void onCompleted() {

Log.i(TAG, "Completed");

}

@Override

public void onError(Throwable arg0) {

Log.i(TAG, "onError");

}

@Override

public void onNext(Long arg0) {

Log.i(TAG, "onNext-> "+ arg0);

}

};

//订阅事件

observable.subscribe(subscriber);

运行结果:2秒后从0开始每隔4秒依次递增

9:Range 创建一个发射特定整数序列的Observable,Range操作符发射一个范围内的有序整数序列,你可以指定范围的起始和长度。

//创建被观察者

//两个参数:

//第一个参数:起始整数

//第二个参数:长度

Observable observable = Observable.range(50, 5);

//创建观察者

Subscriber subscriber =new Subscriber() {

@Override

public void onCompleted() {

Log.i(TAG, "Completed");

}

@Override

public void onError(Throwable arg0) {

Log.i(TAG, "onError");

}

@Override

public void onNext(Integer arg0) {

Log.i(TAG, "onNext-> "+ arg0);

}

};

//订阅事件

observable.subscribe(subscriber);

运行结果:

10:Repeat 创建一个发射特定数据重复多次的Observable,Repeat重复地发射数据。某些实现允许你重复的发射某个数据序列,还有一些允许你限制重复的次数。RxJava将这个操作符实现为repeat方法。它不是创建一个Observable,而是重复发射原始Observable的数据序列,这个序列或者是无限的,或者通过repeat(n)指定重复次数。

//创建被观察者

Observable observable = Observable.range(50, 5).repeat(2);

//创建观察者

Subscriber subscriber =new Subscriber() {

@Override

public void onCompleted() {

Log.i(TAG, "Completed");

}

@Override

public void onError(Throwable arg0) {

Log.i(TAG, "onError");

}

@Override

public void onNext(Integer arg0) {

Log.i(TAG, "onNext-> "+ arg0);

}

};

//订阅事件

observable.subscribe(subscriber);

运行结果:

11:Timer 创建一个Observable,它在一个给定的延迟后发射一个值。

//创建被观察者

Observable observable = Observable.timer(2,4, TimeUnit.SECONDS);

//创建观察者

Subscriber subscriber =new Subscriber() {

@Override

public void onCompleted() {

Log.i(TAG, "Completed");

}

@Override

public void onError(Throwable arg0) {

Log.i(TAG, "onError");

}

@Override

public void onNext(Long arg0) {

Log.i(TAG, "onNext-> "+ arg0);

}

};

//订阅事件

observable.subscribe(subscriber);

运行结果:

Timer 已经过时了,而是由interval操作符来间隔执行,推荐使用interval。

observable java_RxJava学习笔记(1)创建Observable相关推荐

  1. Django:学习笔记(2)——创建第一个应用

    Django:学习笔记(2)--创建第一个应用 创建应用 在 Django 中,每一个应用都是一个 Python 包,并且遵循着相同的约定.Django 自带一个工具,可以帮你生成应用的基础目录结构, ...

  2. spring学习笔记02-spring-bean创建的细节问题

    spring学习笔记02-spring-bean创建的细节问题 三种创建Bean对象的方式 Bean的作用范围 Bean的生命周期 <?xml version="1.0" e ...

  3. JavaScript学习笔记:创建、添加与删除节点

    JavaScript学习笔记:创建.添加与删除节点 文章目录 JavaScript学习笔记:创建.添加与删除节点 一.DOM对象节点类型 二.创建节点 1.创建元素节点 2.创建文本节点 3.创建属性 ...

  4. Python学习笔记:创建分数类

    Python学习笔记:创建分数类 1.编写创建分数类.py # 创建分数类from math import gcd# 定义分数类 class Fraction: def __init__(self, ...

  5. Java学习笔记:创建线程的两种方法

    Java学习笔记:创建线程的两种方法 一.预备工作 1.创建Maven项目ThreadDemo 2.在pom.xml里添加依赖 二.继承Thread类创建子线程

  6. oracle 创建角色 权限设置,[学习笔记] Oracle创建用户、分配权限、设置角色,

    [学习笔记] Oracle创建用户.分配权限.设置角色, 创建用户 create user student --用户名 identified by "123456" --密码 de ...

  7. Unity3D学习笔记之七创建自己的游戏场景

    到现在为止我们已经拥有了比较完备的Prefab,已经可以创建宏大的游戏场景,并以第一人称视角在场景中漫游了.这里给大家做个小的示范,建一个小场景大家在创建场景的时候需要自由发挥,做个尽量大的场景出来. ...

  8. Unity3D学习笔记之六创建更多的Prefab

           在写完第五篇后,因为不知名的原因,我突然不能够上传100KB以上的图片在博客中了.等了几天还是这样,所以我用PS把图片的分辨率一张张调低,让图片的大小都在100左右,将积攒了四篇的学习笔 ...

  9. unity3d怎么让模型动起来_Unity3D 学习笔记(一) 创建3d人物并让其动起来

    Unity3D 学习笔记 创建3d人物并让其动起来 2020年2月9日 17:03 学习内容:b站傅老师的U3D黑魂复刻课程 # 创建地板,添加地板砖材质 调整大小,调整贴图 # 创建一个胶囊,并添加 ...

最新文章

  1. 【移动开发】安卓Lab2(01)
  2. 不等双十一,ChemDraw降价活动已经打开!
  3. iOS根据图片url获取尺寸
  4. application/x-www-form-urlencoded 与multipart/form-data
  5. python打乱顺序的洗牌函数
  6. jinja test
  7. java面试会问到的问题吗_[转载]java面试中经常会被问到的一些算法的问题
  8. python返回值函数_Python函数的返回值(一)
  9. Android微信分享功能实例+demo
  10. 24小时“凶宅试睡直播”去“凶”,阿里拍卖为卖凶宅有点拼
  11. 基于华为高端NAS存储双活的POC测试
  12. 微信小店和微信小商店的区别?如何建立怎么开通?
  13. excel处置4000行数据卡_数十万数据Excel数据不好处理怎么办?几行Python搞定
  14. Java 根据多边形坐标点 计算多边形面积
  15. 记一次神奇的CVPR 2021 Rebuttal 经历
  16. 在word如何显示左侧的索引目录
  17. SPI driver
  18. 字节跳动,收割海外大厂员工
  19. HTTPS 的实现原理
  20. 教材订购模块java代码实现,java毕业设计_springboot框架的教材征订系统

热门文章

  1. ABP+AdminLTE+Bootstrap Table权限管理系统第二节--在ABP的基础做数据库脚本处理
  2. 记一次MacBook Pro无法连接wifi网络修复
  3. 2020互联网公司端午礼盒大比拼!
  4. linux内核memset,linux内核API每天来一发(2)
  5. 沃土前端系列 - HTML常用标签
  6. VR技术不仅仅适用于淘宝 VR+医疗来袭
  7. 入手评测 华为nova10和荣耀70选哪个好
  8. pip+conda更换国内源(ubuntu18.04+win10)
  9. c语言两个for语句并列执行_c语言两个for循环套用
  10. 【重磅】AlphaZero炼成最强通用棋类AI,DeepMind强化学习算法8小时完爆人类棋类游戏