0

我正在关注https://github.com/android/architecture-components-samples/tree/88747993139224a4bb6dbe985adf652d557de621/GithubBrowserSample以获取示例应用程序。我可以看到他们使用 NetworkBoundResource 类来处理数据库操作和网络操作。

我现在面临的问题是如果我不使用 Transformations.map / Transformations.swtichMap 方法,MediatorLiveData onChanged 方法不会被调用。

我尝试使用它,但在使用多个输入的情况下遇到问题。

假设我有一个请求登录,它需要 3 个参数,即。用户名、密码和设备 ID。如何在视图模型中使用 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?

4

0 回答 0