从RoomDB获得错误的数据。使用CoroutinesCope的GetCount()不起作用

发布于 2025-01-23 18:33:24 字数 796 浏览 0 评论 0 原文

我有一个使用导航活动,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。

I have a login app which uses Navigation Activity, JetPack and RoomDB. It has LoginFragment, LoginVieweModel, LoginDatabase, LoginDao and login Repository. I don't know the correct syntax to get UserCount from RoomDB.

The whole app is located in GitHub at https://github.com/msyusuf/LoginFragNavActivity.git.

Code in LoginDao is

@Query("SELECT COUNT(*) FROM loggedin_user_table")
suspend fun getLoggedInUserCount(): Int

Code in LoginViewModel is

fun getUserCount(): Int {
    var count: Int = 99
    viewModelScope.launch {
        count = loginRepository.getUserCount()
        Log.i(LOG_TAG, "In LoginViewModel.getUserCount(): count = $count")
    }
    return count
}

The fun getUserCount() does not have count from repository, it 99 which I used to initialize the count variable.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

幻梦 2025-01-30 18:33:24

中getUserCount() loginViewModel的功能 coroutine coroutine,使用 plunch> lunage>启动构建器启动,将在函数返回后执行。您应该考虑要如何使用数据。如果您希望将其用作其他计算的输入数据,那么制作 getUserCount()函数 suppend

suspend fun getUserCount(): Int {
    val count: Int = loginRepository.getUserCount()
    Log.i(LOG_TAG, "In LoginViewModel.getUserCount(): count = $count")
    return count
}

如果您希望显示它在UI中,您可以将其制作 suppend 如上所述,并使用

in 活动/ fragment

lifecycleScope.launch {
    val count = viewModel.getUserCount()
    // update UI
}

另一个选择是使用 livedata 或kotlin Flow

In getUserCount() function of LoginViewModel class a coroutine, launched using launch 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 the getUserCount() function suspend:

suspend fun getUserCount(): Int {
    val count: Int = loginRepository.getUserCount()
    Log.i(LOG_TAG, "In LoginViewModel.getUserCount(): count = $count")
    return count
}

If you want it to be displayed in UI you can make it suspend like above and call it in a coroutine using lifecycleScope:

in Activity/Fragment

lifecycleScope.launch {
    val count = viewModel.getUserCount()
    // update UI
}

Another alternative is to apply reactive approach using LiveData or Kotlin Flow

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文