2

MVP でコーディングされた Android アプリの例を見ていました (リンクはこちら)。しかし今、チュートリアルで指定された RxJava1 コードを RxJava2 コードに再コーディングしたいと考えています。しかし、私は特にそれで苦労していunSubscribe()ますisUnSubscribed(). 私はそれを変換しようとしましたが、私の試みを共有します。

RxJava1 コード:

  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コードに対する私の試みです:

  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の概念にかなり慣れていません。誰かが私の過ちを指摘し、私を導くことができれば、それは素晴らしいことです. :)

4

1 に答える 1