カテゴリー
Android Java RxJava

RxJavaを学ぶ(その3)

バックグラウンド・スレッドからメインスレッドにタスクを返したい場合は、subscribe()の前段にobserveOn(AndroidSchedulers.mainThread())を挿入する。これでバックグラウンド・タスクの結果によるUIのアップデートが可能。

下記はCompositeDisposableにdisposeを任せる例も兼ねて書いてみた。

Disposable isCountingDownDisposable = playMidi.isCountingDownSubject.observeOn(AndroidSchedulers.mainThread()).subscribe(value -> {
      if (value) {
        playButton.setImageResource(R.drawable.ic_round_loop_24);
        playButton.setPadding(10,10,10,10);
      } else {
        playButton.setImageResource(R.drawable.ic_play_fill);
        playButton.setPadding(-20,-20,-20,-20);
      }
    });
compositeDisposable.add(isCountingDownDisposable);
カテゴリー
Android Java RxJava

RxJavaを学ぶ(その2)

値を代入すると、Subscriberで何か処理がトリガーされるようなコード

Subject<Integer> intSubject = PublishSubject.create();
intSubject.subscribe(i -> Log.d(TAG, "Logging: " + i));


private class onButtonClicked implements View.OnClickListener {
    @Override
    public void onClick(View v) {
        intSubject.onNext(17);
    }
}

// when the button is clicked, Logs out "Logging: 17"
カテゴリー
Android Java RxJava

RxJavaを学ぶ(その1)

全体像を掴むために、このビデオは分かりやすくていいと思います!

まずは、最小構成

Observable<String> myObservable = Observable.just("Some new string", "Some other String", "Another");
// "s" is a subscribed string, and logging it when received in onNext
myObservable.subscribe(s -> Log.d(TAG, "Logging: " + s));

Observerを設定し、処理を記述することもできる

myObserver = new Observer<String>() {
      @Override
      public void onSubscribe(@NonNull Disposable d) {
        Log.i(TAG, "onSubscribe invoked");
      }

      @Override
      public void onNext(@NonNull String s) {
        Log.i(TAG, "onNext invoked");
        Log.i(TAG, "Logging " + s);
      }

      @Override
      public void onError(@NonNull Throwable e) {
        Log.i(TAG, "onError invoked");
      }

      @Override
      public void onComplete() {
        Log.i(TAG, "onComplete invoked");
      }
};

myObservable.subscribe(myObserver);