【发布时间】:2021-07-20 10:38:27
【问题描述】:
和标题一样,我有 _token
private val _token = MutableLiveData<String>()
应该更新
val userPackages: LiveData<List<Packages>> = Transformations.switchMap(_token) {
packagesLiveData(it)
}
使用后
fun setToken(token: String) {
Log.d(TAG, "setToken: $token")
_token.postValue(token)
}
从这个 Log.D 我知道我得到了有效的字符串 我试过了
_token.value = token
但没有任何改变 我从这个函数中看到我在 switchmap 中调用
private fun packagesLiveData(string: String): LiveData<List<Packages>> {
Log.d(TAG, "switchMap: $string")
return liveData {
tvRepository
.getUserPackage(string)
.asLiveData()
}
}
我没有得到任何改变(因为这个函数根本没有被调用) 或者,如果我将 _token 的值初始化为任何字符串,那么我会看到它被调用了两次,但使用的是这个初始化值,而不是我在测试时确认的 _token.value 中的值确实在改变,但 switchmap 永远无法访问
编辑
看起来我只是没有观察到我的 liveData 但现在当我尝试这样做时,我收到了错误,我没有这个 val 的 get 函数 我正在从这个片段中获取我的模型
private val tvViewModel: TvViewModel by viewModels()
这就是我的观察者的样子
tvViewModel.userPackages.observe(viewLifecycleOwner, {
Log.d(TAG, "setTvObservers: ${it?.get(0)}")
})
请求的视图模型:
@HiltViewModel
class TvViewModel @Inject constructor(
private val tvRepository: TVRepository
) :
ViewModel() {
companion object {
const val TAG = "TvViewModel"
}
private val _tvPath = MutableLiveData<String>()
private val _token = MutableLiveData<String>()
val tvPath: LiveData<String> = _tvPath
val userPackages: LiveData<List<Packages>> = Transformations.switchMap(_token) {
packagesLiveData(it)
}
fun setTvPath(path: String) {
_tvPath.postValue(path)
}
fun setToken(token: String) {
Log.d(TAG, "setToken: $token")
_token.postValue(token)
}
private fun packagesLiveData(string: String): LiveData<List<Packages>> {
Log.d(TAG, "switchMap: $string")
return liveData(Dispatchers.IO) {
tvRepository
.getUserPackage(string)
.asLiveData()
}
}
}
【问题讨论】:
标签: android kotlin android-livedata mutablelivedata