为什么 #onComplete() 被调用了两次,即使 #addSomething() 只被调用了一次?这是代码 fragment :
private void addSomething() {
Subscriber<AddCommentResponse> subscriber = createSubscriber();
NetworkService.getIp()
.subscribeOn(Schedulers.io())
.flatMap(addSomethingService)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(subscriber);
}
private Subscriber<AddCommentResponse> createSubscriber() {
return new Subscriber<AddCommentResponse>() {
@Override
public void onCompleted() {
this.unsubscribe();
Toast.makeText(
MyApplication.context, getString(R.string.toast_comment_added_successfully), Toast.LENGTH_LONG
).show();
navigateBack();
}
@Override
public void onNext(AddCommentResponse response) {
onCompleted();
}
};
最佳答案
RxJava 遵循这个约定:它会调用你的观察者 onNext,然后用 onComplete 或 onError 调用结束你的流。
您不必这样做。 RX 会为您完成。
- 从 onNext 方法中删除 onComplete() 调用:它没有用,但会解决您的问题。
- createSubscribe 应该返回一个 Observer。订阅者是具有不同含义的观察者。 (订阅方法参数为Observer)
关于android - 订户 OnComplete 调用了两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29462592/