サンプル アプリケーションについては、 https://github.com/android/architecture-components-samples/tree/88747993139224a4bb6dbe985adf652d557de621/GithubBrowserSampleに従っています。NetworkBoundResource クラスを使用してデータベース操作とネットワーク操作を処理していることがわかります。
私が今直面している問題は、Transformations.map / Transformations.swtichMap メソッドを使用しないと MediatorLiveData onChanged メソッドが呼び出されないことです。
私はそれを使用してみましたが、複数の入力の場合にそれらを使用しているときに問題に直面しました。
3つのパラメーターが必要なリクエストログインがあるとします。ユーザー名、パスワード、デバイス ID。複数の入力のビュー モデルで Transformations.map / Transformations.switchMap を使用するにはどうすればよいですか。
以下は私のviewModelコードです:
private var _response: MutableLiveData<Resource<LoginResponse>> = MutableLiveData()
val response: LiveData<Resource<LoginResponse>>
get() = _response
fun login(
username: String?,
password: String?,
deviceId: String?
) {
_response = repository.load(
username, password,deviceId
) as MutableLiveData<Resource<LoginResponse>>
}
以下は、リポジトリでの私の読み込み方法です。
fun load(
username: String?,
password: String?,
deviceId: String?
): LiveData<Resource<LoginResponse>> {
return object :
NetworkBoundResource<LoginResponse, LoginResponse>(appExecutors) {
override fun saveCallResult(item: LoginResponse) {
loginDao.insertAll(item)
}
override fun shouldFetch(data: LoginResponse?): Boolean {
return data == null || data.data != null ?: true ||
repoListRateLimit.shouldFetch(
serviceRequestId
)
}
override fun loadFromDb() = loginDao.getLoginData()
override fun createCall() = apiInterface.loginAPI(
username = username,
password = password,
deviceId = deviceId
)
override fun onFetchFailed() {
repoListRateLimit.reset(serviceRequestId)
}
}.asLiveData()
}
私は応答を観察しています: 以下のようにフラグメント内の LiveData:
loginViewModel.loginResponse.observe(viewLifecycleOwner, Observer {
Log.d(TAG, "Reached")
})
これを呼び出すたびに、onChanged メソッドが呼び出されません。ここでのワークケースとは何か教えてもらえますか? または、複数の入力で Transformations.map / Transformations.swtichMap を使用するにはどうすればよいですか?