引き続き以下なリポジトリのソースを確認を。
ええと、BehaviorSubject#onNext を呼び出した時に何が起きるのか、を確認。
SearchActivity にて以下なカンジで onNext が呼び出されています。
mNameObservable
.observeOn(Schedulers.io())
.subscribe {
mServer.findUser(it).subscribe {
mUserObservable.onNext(it)
}
}
mServer.findUser(it) は Observable.just に検索結果な JsonObject を渡した戻りが戻されます。ので、subscribe に渡した関数リテラルにその JsonObject が渡される形になり、onNext メソドにてその JsonObject が渡されることで、以下な定義の BehaviorSubject なストリームにその JsonObject が、という形になるはず。
mUserObservable
.observeOn(AndroidSchedulers.mainThread)
.map {
if (mServer.isOk(it)) {
User(it.get("id").asString, it.get("name").asString)
} else {
null
}
}
.subscribe {
addFriendButton.setEnabled(it != null)
loading.setVisibility(View.INVISIBLE)
mUser = it
}
まとめ
- BehaviorSubject のオブジェクトを引数無しの create で作ると without default value な形になるので値がストリームに流れない
- Observable.just したソレを subscribe すると渡されたデータがストリームを流れます
- BehaviorSubject#onNext は渡したオブジェクトがストリームを流れます
つうか、何となく subscribe に渡した Observer なソレに渡されるだけ? ってボケをカマシておりました。随分理解が進みました。