首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从RxJava1迁移到RxJava2

从RxJava1迁移到RxJava2
EN

Stack Overflow用户
提问于 2017-01-06 16:43:14
回答 1查看 465关注 0票数 2

我看了一个用MVP (链接在这里)编写的安卓应用程序的例子。但是现在我想将本教程中给定的RxJava1代码重新编码为RxJava2代码。然而,我对它有困难,特别是unSubscribe()isUnSubscribed()。我试图改变它,我将分享我的尝试。

RxJava1代码:

代码语言:javascript
复制
  public void doLogin(AuthCredentials credentials) {
    cancelSubscription();
    subscriber = new Subscriber<Account>() {
      @Override public void onCompleted() {
        if (isViewAttached()) {
          getView().loginSuccessful();
        }
      }

      @Override public void onError(Throwable e) {
        if (isViewAttached()) {
          getView().showError();
        }
      }

      @Override public void onNext(Account account) {
        eventBus.post(new LoginSuccessfulEvent(account));
      }
    };

    // do login
    accountManager.doLogin(credentials)
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(subscriber);
  }
  private void cancelSubscription() {
    if (subscriber != null && !subscriber.isUnsubscribed()) {
      subscriber.unsubscribe();
    }
  }

这是我在RxJava2代码上的尝试:

代码语言:javascript
复制
  public void doLogin(AuthCredentials credentials) {
    cancelSubscription();
    subscriber = new Subscriber<Account>() {

      @Override public void onSubscribe(Subscription s) {
        // do login
        accountManager.doLogin(credentials)
                      .subscribeOn(Schedulers.io())
                      .observeOn(AndroidSchedulers.mainThread())
                      .subscribe(subscriber);
      }

      @Override public void onCompleted() {
        if (isViewAttached()) {
          getView().loginSuccessful();
        }
      }

      @Override public void onError(Throwable e) {
        if (isViewAttached()) {
          getView().showError();
        }
      }

      @Override public void onNext(Account account) {
        eventBus.post(new LoginSuccessfulEvent(account));
      }
    };
  }


  private void cancelSubscription() {   
    //isUnsubscribed and unsubscribe doesnt work anymore
  }

我对RxJava的概念相当陌生。如果有人能指出我的错误并指导我,那就太好了。:)

EN

回答 1

Stack Overflow用户

发布于 2017-01-28 10:27:07

我为迟到的答复道歉。一直都很忙。正如@akarnokd所述,与RxJava2相比,RxJava1做了许多更改。对于那些感兴趣的人,请看这个视频

就上述问题而言,我们可以使用DisposableObservables实现同样的目标。

以下是上述问题的答案。我已经测试过了,而且效果很好。

代码语言:javascript
复制
public void doLogin(AuthCredentials credentials) {
     myDisposableObserver = new DisposableObserver<Account>() {
                @Override
                public void onNext(Account account) {
                    eventBus.post(new LoginSuccessfulEvent(account));
                }

                @Override
                public void onError(Throwable e) {
                    if (isViewAttached()) {
                        getView().showError();
                    }
                }

                @Override
                public void onComplete() {
                    if (isViewAttached()) {
                        getView().loginSuccessful();
                    }
                }
            };

            // do login
            accountManager.doLogin(credentials)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(subscriber);
        }
    }

    private void cancelSubscriptionToMyPrescriptorManager() {
        if (myDisposableObserver != null && !myDisposableObserver.isDisposed()) {
            myDisposableObserver.dispose();
        }
    }   
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41510213

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档