安卓携程问题,为什么调用的函数无法返回值?
UI层:我这里开始调用取得数据的方法fetchData
@Composable
fun IntentMsg(){
val viewModel= UserViewModel(UserRepository())
val users = viewModel.users.collectAsState()
// 当屏幕可见时触发数据加载
LaunchedEffect(Unit) {
viewModel.fetchData()
}
Viewmodel层:我挂的协程取得repository.getData()的数据,我想的是取得完了可以更新,
但实际上println("_users-$it")都没有打印!
我刚刚又发现,甚至进入fetchData方法的第一句都没有打印,却得到了返回值?不是主线程?
class UserViewModel (private val repository: UserRepository) : ViewModel() {
private val _users = MutableStateFlow<ResultDatas<List<User>>>(ResultDatas.Loading)
val users: StateFlow<ResultDatas<List<User>>> = _users
.asStateFlow()
suspend fun fetchData() {
println("_users1---------")
viewModelScope.launch {
repository.getData().collect {
println("_users---------$it")
_users.value = it
}
}
}
}
Repository层是这样写的,值都取回来了,却没有返回到Viewmodel的调用源,这是为什么?
fun getData(): Flow<ResultDatas<List<User>>> =
flow {
// kotlinx.coroutines.delay(3000L)
try {
val response = userService.getData()
println("pageresponse-----${response}")
emit(ResultDatas.Success(response))
} catch (e: Exception) {
println("pagee.message---${e}--")
emit(ResultDatas.Error(e.message ?: "网络连接错误"))
}
}.catch {
emit(ResultDatas.Error(it.message ?: "unknown error"))
}
}
