我写了函数从数据库返回值,它的工作,因为我赋值给状态和重组,但这不是正确的方式与数据库交互。
fun getUser():State<User?>{
val id = sharedPrefs?.getString("uId", "")
id?.let {
if (it != "")
runBlocking {
CoroutineScope(Dispatchers.IO).launch {
repository?.getUser(it)?.let {
currentUser.value = it
Log.v("user_1",""+it)
}
}
}
}
Log.v("user_2",""+currentUser.value)
return currentUser
}
我原以为runBlocking可以让它工作,但是user_1包含值,user_2是空的。所以修改只在协程中可见,协程似乎是在返回后执行的。如果你能提供任何关于协程的好资源,我将不胜感激。
1条答案
按热度按时间qjp7pelc1#
正确的方法是使用suspend函数和
withContext
而不是launch
--我还需要清理代码中的其他一些内容(消除几乎所有的?.let
),但这样就可以了: