我正在关注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?