observable java_RxJava学习笔记(1)创建Observable

本文介绍了RxJava的基本概念和特点,详细讲解了如何使用Create、Just、From、Defer、Empty、Never、Throw、Interval、Range、Repeat和Timer等操作符创建Observable,提供了实例代码演示各个操作符的工作原理。
摘要由CSDN通过智能技术生成

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);

运行结果:

2e0b1086dafa

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);

运行结果:

2e0b1086dafa

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);

运行结果:

2e0b1086dafa

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);

运行结果:

2e0b1086dafa

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);

运行结果:

2e0b1086dafa

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);

运行结果:

2e0b1086dafa

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依次递增

2e0b1086dafa

//创建被观察者

//两个参数:

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

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

//第三个参数:时间单位:(毫秒,秒,分钟) 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秒依次递增

2e0b1086dafa

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);

运行结果:

2e0b1086dafa

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);

运行结果:

2e0b1086dafa

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);

运行结果:

2e0b1086dafa

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值