用户的onComplete调用两次(Subscriber OnComplete called twi

2019-10-22 12:32发布

为什么#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();                        
                }
            };

Answer 1:

RxJava按照这个合同:它会叫你的观察者onNext然后将结束用的onComplete或onError的呼叫您的流。

你不必这样做。 RX会为你做它。

  • 请从onNext方法的onComplete()调用:这是没用的,它会解决您的问题。
  • createSubscribe应该返回一个观察者来代替。 订阅者是具有不同意义的观察。 (订阅方法参数是观测器)


文章来源: Subscriber OnComplete called twice