我是Rxjava的新手,我在谷歌搜索了很多。但对我的问题不是很有用。 我的情况是使用第三方SDK的Living App。但是进入起居室的过程很复杂而且没有控制。
关于整个过程如下:
每一步都依赖于上一步的结果,并且回调不是相同的IN / OUT类型,所以我很难用rxjava对它进行编码。
感谢。
答案 0 :(得分:0)
您不能期望在没有任何代码库的情况下为您提供有关您的应用可以执行的操作的正确源代码。 我建议你在开始编码之前尝试阅读/理解观察者模式
在这里,您可以看到Observer模式的结构如何工作
Observable.just(getRoomInfo())
.map(info -> sdkApi(info))
.map(response -> joinChannel(response))
.subscribeOn(Schedulers.newThread())//-->This make your pipeline async.
.subscribe(res -> updateUI(res))
在这里,您可以看到有关RxJava如何工作的一些文档和实际示例。 https://github.com/politrons/reactive
答案 1 :(得分:0)
您可以使用Observable.fromEmitter将异步调用包装在一个observable中,如下所示:
return Observable.fromEmitter(new Action1<Emitter<GetRoomModel>>() {
@Override
public void call(final Emitter<GetRoomModel> emitter) {
AsyncFunction yourAsyncFunction = /* ... */
final AsyncFunction.Listener listener = new AsyncFunction.Listener() {
@Override
public void onResult(RoomInfo roomInfo) {
emitter.onNext(roomInfo);
}
};
yourAsyncFunc.doAsync(/* data */, listener);
emitter.setCancellation(new Cancellable() {
@Override
public void cancel() throws Exception {
// cancel your async call
}
});
}
}, Emitter.BackpressureMode.BUFFER);
您可以为每个异步调用执行相同的操作,然后将它们链接起来。