- create
create(OnSubscribe):创建一个Observable
一个格式良好的Observable应该试图去调用onComplete()方法一次或者调用onError()方法一次
注意:通过isUnsubscribed检查是一个良好的实践。当没有Observer时Observable可用避免发射数据或做昂贵的计算
示例代码:
Observable.create(new Observable.OnSubscribe<Integer>() {
@Override
public void call(Subscriber<? super Integer> observer) {
try {
if (!observer.isUnsubscribed()) {
for (int i = 1; i < 5; i++) {
observer.onNext(i);
}
observer.onCompleted();
}
} catch (Exception e) {
observer.onError(e);
}
}
} ).subscribe(new Subscriber<Integer>() {
@Override
public void onNext(Integer item) {
System.out.println("Next: " + item);
}
@Override
public void onError(Throwable error) {
System.err.println("Error: " + error.getMessage());
}
@Override
public void onCompleted() {
System.out.println("Sequence complete.");
}
});
-
defer
defer():直到有observer订阅才创建Observable,并且为每个Observer创建最新的Observable。
-
from
from(array):将各种对象或数据类型转换成Observable
from(Iterable)
from(Future)
from(Future,Scheduler)
from(Future,timout,timeUnit)
示例代码:
Integer[] items = { 0, 1, 2, 3, 4, 5 };
Observable myObservable = Observable.from(items);
myObservable.subscribe(
new Action1<Integer>() {
@Override
public void call(Integer item) {
System.out.println(item);
}
},
new Action1<Throwable>() {
@Override
public void call(Throwable error) {
System.out.println("Error encountered: " + error.getMessage());
}
},
new Action0() {
@Override
public void call() {
System.out.println("Sequence complete");
}
}
);
运行结果:
- Interval
-
interval(long,TimeUnit)
interval(long,TimeUnit,Scheduler)
每隔一个时间段发射一个增长的整数
-
interval(long,long,TimeUnit)
interval(long,long,TimeUnit,Scheduler)
第一个参数指定的时间发射一个0,然后按第二个参数指定的时间每隔一个时间段发射一个增长的整数
-
just
just(item)
类似from,但是会将源数据做为一个整体发射出去
注意:如果传入null
到just
,它会发射一个null
出去 -
range
range(int,int)
range(int,int,Scheduler)
range(n,m)会发射从n开始的m个元素
注意:如果n为0,则不会发射任何值;如果n<0,则会抛异常 repeat
-
repeat()
repeat(long)
repeat(Scheduler)
repeat(long,Scheduler)
不会初始化一个Observable,而是会对一个Observable重复发射
-
repeatWhen(Func1)
repeatWhen(Func1,Scheduler)
-
Start
发射一个函数返回的值
-
Timer
timer(long,TimeUnit)
timer(long,TimeUnit,Scheduler)
在延迟指定的一段时间后发射一个0