我还是RxJava的新手,我对我的一些代码感到有点困惑,我没有直接访问Observables,但是将Observer作为某个方法的参数传递给Observable。
我想以某种方式结合两个观察者,但无法弄清楚如何用观察者做到这一点。
在这里,我想“组合”mGetPotatoes和mGetBurger,只有在onNext时才会显示土豆和汉堡(我猜是Obregables会是zip())。
mGetPotatoes.execute( new DisposableObserver<List<Potatoes>>() {
@Override
public void onNext(List<Potatoes> potatoes) {
getMvpView().showPotatoes(mPotatoesMapper.mapPotatoesToViewModels(potatoes));
}
@Override
public void onComplete() {
}
@Override
public void onError(Throwable e) {
getMvpView().hideProgress();
getMvpView().showErrorMessage(e.getMessage());
}
});
mGetBurger.execute( new DisposableObserver<Burger>() {
@Override
public void onNext(Burger burger) {
getMvpView().showBurger(mBurgerMapper.mapBurgerToViewModel(burger));
}
@Override
public void onComplete() {
}
@Override
public void onError(Throwable e) {
getMvpView().hideProgress();
getMvpView().showErrorMessage(e.getMessage());
}
});
这个问题是this one的一个子集,其中mGetPotatoes和mGetBurger(即UseCases)的模板代码是。
答案 0 :(得分:0)
我希望你改变你的架构,以便返回Observable
,你可以操纵它(更改调度程序,执行某些操作等)
如果该选项不可行,您可以获得Subject的解决方法。 Subject
是Observer
,也是Observable
。
对于你的情况:
PublishSubject
zip
)运算符组合并订阅结果答案 1 :(得分:0)
不确定这是什么框架,但您可以通过打包将execute
调用转回Observable
:
Observable<List<Potatoes>> obs = new Observable<List<Potatoes>>() {
@Override public void subscribeActual(final Observer<? super List<Potatoes>> s) {
mGetPotatoes.execute(new DisposableObserver<List<Potatoes>>() {
@Override
public void onStart() {
s.onSubscribe(this);
}
@Override
public void onNext(List<Potatoes> potatoes) {
s.onNext(potatoes);
}
@Override
public void onComplete() {
s.onComplete();
}
@Override
public void onError(Throwable e) {
s.onError(e);
}
}
}
};