Я следую https://github.com/android/architecture-components-samples/tree/88747993139224a4bb6dbe985adf652d557de621/GithubBrowserSample за образец приложения. Я вижу, что они использовали класс NetworkBoundResource для обработки операций с БД и сетевых операций.
Проблема, с которой я сейчас сталкиваюсь, заключается в том, что метод onChanged MediatorLiveData не вызывается, если я не использую метод Transformations.map / Transformations.swtichMap.
Я пытался использовать это, но столкнулся с проблемой при использовании их в случае нескольких входов.
Предположим, у меня есть запрос на вход, который требуется 3 параметра, а именно. имя пользователя, пароль и идентификатор устройства. Как я могу использовать Transformations.map / Transformations.swtichMap в модели представления для нескольких входов.
Ниже приведен мой код 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 с несколькими входами?