/var/log/messages

debugging with sixth sense

Kotlin-android-example

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

ええと、BehaviorSubject#onNext を呼び出した時に何が起きるのか、を確認。

SearchActivity にて以下なカンジで onNext が呼び出されています。

1
2
3
4
5
6
7
    mNameObservable
        .observeOn(Schedulers.io())
        .subscribe {
            mServer.findUser(it).subscribe {
                mUserObservable.onNext(it)
            }
        }

mServer.findUser(it) は Observable.just に検索結果な JsonObject を渡した戻りが戻されます。ので、subscribe に渡した関数リテラルにその JsonObject が渡される形になり、onNext メソドにてその JsonObject が渡されることで、以下な定義の BehaviorSubject なストリームにその JsonObject が、という形になるはず。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
    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 なソレに渡されるだけ? ってボケをカマシておりました。随分理解が進みました。

Comments