我有一个案例需要立即返回observable
,但后来用另一个替换这个observable。
这是一个例子
private Flowable<byte[]> mFlowableStream = Flowable.empty();
@Override
public Flowable<byte[]> startStreamRead() {
bindToService();
return mFlowableStream;
}
然后在绑定到服务之后,我提供了一个类似
的回调连接@Override
public void bindToService() {
mAppContext.bindService(new Intent(mAppContext,StreamService.class), mServiceConnection, 0);
}
@Override
public void onServiceConnected(ComponentName name, IBinder binder) {
mServiceInterection = ((StreamServiceInterection.LocalBinder) binder).getServiceInteractor();
mStreamDisposable = mServiceInterection.getStream()
.subscribe(new Consumer<byte[]>() {
@Override
public void accept(byte[] data) throws Exception {
}
});
}
我想要做的是以某种方式用我从服务中获得的新的observable替换返回的先前mFlowableStream
。
实施此措施的可能策略是什么?也许我应该返回一些其他值,比如Future
。
请建议如何解决此问题
由于
答案 0 :(得分:0)
您可以使用 Flowable.create 代替 Flowable.empty
然后当新数据到来时,只需推送到可流动的。 像例子
final ArrayList<FlowableEmitter<Integer>> arrEmitter = new ArrayList<>();
Flowable<Integer> futureFlow = Flowable.create(new FlowableOnSubscribe<Integer>() {
@Override
public void subscribe(final FlowableEmitter<Integer> e) throws Exception {
e.onNext(1);
e.onNext(2);
arrEmitter.add(e); // hold emitter to use later
}
}, BackpressureStrategy.BUFFER);
futureFlow.subscribe(new ResourceSubscriber<Integer>() {
@Override
public void onNext(Integer integer) {
System.out.println("onNext: " + integer);
}
@Override
public void onError(Throwable t) {
}
@Override
public void onComplete() {
System.out.println("onComplete");
}
});
// =========== When data come
FlowableEmitter<Integer> holdEmitter = arrEmitter.get(0);
holdEmitter.onNext(3);
或者使用你可以根据需要使用**主题*类型
Understanding RxJava Subject — Publish, Replay, Behavior and Async Subject