引き続き以下なリポジトリのソースを確認を。
以下なオブジェクトについて確認を。
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 しないと話が始まらない
んーと、例えば以下のコードで
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 になってるのかが分かっていないのがアレなのか。
時間切れ
このあたり、別途確認させて頂きます。