从RoomDB获得错误的数据。使用CoroutinesCope的GetCount()不起作用
我有一个使用导航活动,JetPack和RoomDB的登录应用程序。它具有loginfragment,loginviewemodel,logIndatabase,logindao和Login存储库。我不知道正确的语法可以从RoomDB获得USERCOUNT。
整个应用程序位于 https://github.com/msyusuf/msyusuf/loginfragnavactivity.git 。
logindao中的代码是
@Query("SELECT COUNT(*) FROM loggedin_user_table")
suspend fun getLoggedInUserCount(): Int
loginviewModel中的代码是
fun getUserCount(): Int {
var count: Int = 99
viewModelScope.launch {
count = loginRepository.getUserCount()
Log.i(LOG_TAG, "In LoginViewModel.getUserCount(): count = $count")
}
return count
}
fun getUserCount()没有来自存储库的计数,它是我用来初始化计数变量的99。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
在
中getUserCount()
loginViewModel的功能
coroutine coroutine,使用plunch> lunage>启动
构建器启动,将在函数返回后执行。您应该考虑要如何使用数据。如果您希望将其用作其他计算的输入数据,那么制作getUserCount()
函数suppend
:如果您希望显示它在UI中,您可以将其制作
suppend
如上所述,并使用in
活动
/fragment
另一个选择是使用
livedata
或kotlinFlow
In
getUserCount()
function ofLoginViewModel
class a coroutine, launched usinglaunch
builder, will be executed after the function returns. You should think about how you want to use the data. If you want it to be used just as an input data for some another calculations then it make sense to make thegetUserCount()
functionsuspend
:If you want it to be displayed in UI you can make it
suspend
like above and call it in a coroutine usinglifecycleScope
:in
Activity
/Fragment
Another alternative is to apply reactive approach using
LiveData
or KotlinFlow