在rxJava中使用just操作符时遇到的坑
2016-04-07 本文已影响1125人
anTttt
错误代码
Observable
.just(initValues())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(values -> doSomething());
我的需求是调用initValues()方法从数据库加载一些数据,在io线程执行,然后在mainThread订阅结果,但是这样写并不能实现我的需求。
原因
因为just(),from()这类能够创建Observable的操作符在创建之初,就已经存储了对象的值,而不是在被订阅的时候才创建。所以在我们订阅之前,initValues()方法就已经在开始执行了,这样就不能达到我们想要的效果。
解决方法
用create()操作符。
Observable
.create(subscriber ->
XXObject values = initValues();
subscriber.onNext(values);
)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(values -> doSomething());