Android 未调用CoroutineLiveData Builder存储库
我试图使用新的liveData builder来检索我的数据,然后将其转换为视图模型。但是,我的存储库代码没有被调用(至少我在使用调试器时看不到它被触发)。我不应该使用两个Android 未调用CoroutineLiveData Builder存储库,android,kotlin,android-livedata,coroutine,mutablelivedata,Android,Kotlin,Android Livedata,Coroutine,Mutablelivedata,我试图使用新的liveData builder来检索我的数据,然后将其转换为视图模型。但是,我的存储库代码没有被调用(至少我在使用调试器时看不到它被触发)。我不应该使用两个liveData{…}builder吗?(一个在我的存储库中,一个在我的视图模型中) class MyRepository@injectconstructor():Repository{ 覆盖getMyContentLiveData(参数:MyParams):LiveData= 实时数据{ val myContent=netw
liveData{…}
builder吗?(一个在我的存储库中,一个在我的视图模型中)
class MyRepository@injectconstructor():Repository{
覆盖getMyContentLiveData(参数:MyParams):LiveData=
实时数据{
val myContent=networkRequest(params)//使用params发送网络请求
发射(myContent)
}
}
类MyViewModel@Inject构造函数(
私有val存储库:MyRepository
):ViewModel(){
val viewModelList=liveData(Dispatchers.IO){
val contentLiveData=repository.getContentLiveData(keyParams)
val viewModelLiveData=contentToViewModels(contentLiveData)
发射(viewModelLiveData)
}
私有趣味contentToViewModels(contentLiveData:LiveData):LiveData{
返回Transformations.map(contentLiveData){content->
//执行一些转换并返回列表
}
}
}
类MyFragment:Fragment(){
@注入
lateinit var viewModelFactory:ViewModelProvider.Factory
val myViewModel:myViewModel by lazy{
ViewModelProviders.of(这是viewModelFactory.get(MyViewModel::class.java)
}
lateinit变量参数:MyParams
重写转速表(上下文:上下文){
AndroidSupportInjection.注射(此)
super.onAttach(上下文)
myViewModel.params=params
myViewModel.viewModelList.observe(这个,观察者{
onListChanged(it)
})
}
您可以尝试使用emitSource
:
val viewModelList = liveData(Dispatchers.IO) {
emitSource(
repository.getContentLiveData(keyParams).map {
contentToViewModels(it)
}
}
您似乎正在设置一个
LiveData
来发出另一个LiveData
。这似乎很奇怪。这应该是val viewmodelist=contentToViewModels(repository.getContentLiveData(keyParams))
?我会试试看。@commonware不起作用。存储库仍然被完全跳过。您可能还想看看emitSource
东西-它似乎是为您制作的:)是的,这是丢失的部分。谢谢!
val viewModelList = liveData(Dispatchers.IO) {
emitSource(
repository.getContentLiveData(keyParams).map {
contentToViewModels(it)
}
}