/var/log/messages

debugging with sixth sense

Kotlin-android-example

引き続き以下なリポジトリのソースを確認を。

以下なオブジェクトについて確認を。

1
2
val mNameObservable: BehaviorSubject<String> = BehaviorSubject.create()
val mUserObservable: BehaviorSubject<JsonObject> = BehaviorSubject.create()

まず、BehaviorSubject から。

BehaviorSubject

初期値を持つ Subject との事。onNext() が呼び出された時に値を通知しつつその値を cache という記述もありますね。というかコンストラクタではなくて create というメソド使ってるのだけれどこれは一体何なのか。

ええと、

  • Subject のイメージができていない

ということで確認してみます。

  • Subject は Observer で Observable

とのこと。やはり Observer と Observable のあたりのイメージができていないのですね。ということで以下を確認。

以下に控えを。

  • データソースを提供する Observable を作る (Observable.from とか Observable.just とか Observable.range とか)
  • Operator を使ってストリームの要素一つづつについて云々
  • Observer を使って Observable を subscribe
  • Observable の subscribe メソドに Oberver を渡す、のか
  • Observable を作って云々した後に subscribe しないと話が始まらない

んーと、例えば以下のコードで

1
2
3
4
5
6
7
8
9
10
11
    WidgetObservable.text(editText)
        .doOnNext { e: OnTextChangeEvent ->
            addFrientButton.setEnabled(false)
            loading.setVisibility(View.INVISIBLE)
        }
        .map { it.text().toString() }
        .filter { it.length() > 3 }
        .debounce(500, TimeUnit.MILLISECONDS)
        .subscribe {
            mNameObservable.onNext(it)
        }

の最後の subscribe に lambda が渡されているあたりなのか。本来ならここ、Oberver が渡されるべき? つうか何が略されて lambda になってるのかが分かっていないのがアレなのか。

時間切れ

このあたり、別途確認させて頂きます。

Comments