OnChanged из MediatorLiveData не вызывается, если не используются преобразования - PullRequest
0 голосов
/ 04 апреля 2020

Я следую 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 с несколькими входами?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...