/var/log/messages

Jan 9, 2016 - 1 minute read - Comments - android

kotlin-android-example

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

ええと、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 なソレに渡されるだけ? ってボケをカマシておりました。随分理解が進みました。

powershell foul

comments powered by Disqus