android - 订户 OnComplete 调用了两次

标签 android observable rx-java

为什么 #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/

相关文章:

java - 在 Android 中使用 autocompleteTextView 时如何获取返回特定字符串?

java - 在后台跟踪网页

javascript - 如何使用 typescript 在 native 脚本中实现 Observable

android - RxJava 作为 Android 项目中的事件总线——从总线中移除事件

kotlin - RxJava可观察到错误,可从数据库中获取项目,但仍通过传递错误

android - OnItemClickListener 不适用于包含按钮的 ListView 项目

android - 如何阻止 Android 选项卡中的标题在单词中间换行?

javascript - Angular 2 : unable to return a json mapped from an Http response

typescript - RXJS 订阅完成模式

android - dispose 后订阅 observable