订户 OnComplete 调用了两次
Subscriber OnComplete called twice
为什么 #onComplete() 被调用了两次,而 #addSomething() 只被调用了一次?这是代码片段:
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 应该 return 一个观察者。订阅者是具有不同含义的观察者。 (订阅方法参数是Observer)
为什么 #onComplete() 被调用了两次,而 #addSomething() 只被调用了一次?这是代码片段:
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 应该 return 一个观察者。订阅者是具有不同含义的观察者。 (订阅方法参数是Observer)