此代码有效
Observable.range(0, 9)
.subscribe(new Action1<Integer>() {
public void call(Integer item) {
LOG.debug("item:{}", item);
}
});
获取:DEBUG:net.test.rx2.App - item:0到9.但是下一个跳过订阅。请告知如何捕捉Observable。
Observable.range(0, 9)
.subscribeOn(Schedulers.newThread())
.subscribe(new Action1<Integer>() {
public void call(Integer item) {
LOG.debug("item:{}", item);
}
});
答案 0 :(得分:2)
这两个例子对我来说都很好。我的猜测是你在应用程序的main方法中测试它。第二个示例在新线程上运行observable,因此主线程不再具有阻塞语句。由于没有阻塞主线程,JVM决定可以终止应用程序。你需要以某种方式阻塞主线程,以便JVM不会过早地关闭你的应用程序(即在Observable发出任何事件之前)。
例如,您可以添加一个简单的System.in.read语句来阻止主线程:
public static void main(String[] args) throws IOException {
Observable.range(0, 9)
.subscribeOn(Schedulers.newThread())
.subscribe(new Action1<Integer>() {
public void call(Integer item) {
LOG.debug("item:{}", item);
}
});
System.in.read(); // block to prevent premature JVM shutdown
}
现在你应该能够观察到可观察表达式的结果。