您好,感谢您考虑我的问题!我正在尝试查询数据库的总和并使用 Jetpack Compose UI 显示总计。
我的 DAO 看起来像这样:
@Dao
interface FindDao {
@Query("SELECT SUM(findAmount) FROM finds")
suspend fun getFindTotal(): Double
}
我的存储库如下所示:
class FindRepository (private val findDao: FindDao) {
private val coroutineScope = CoroutineScope(Dispatchers.Main)
suspend fun getFindTotal():Double {
return findDao.getFindTotal()
}
}
我的视图模型如下所示:
class MainViewModel(application: Application): ViewModel() {
suspend fun getFindTotal(): Double {
return repository.getFindTotal()
}
}
最后我的用户界面如下所示:
@Composable
fun BottomBar(viewModel: MainViewModel) {
val scope_Find_Total = rememberCoroutineScope()
var retrievedFindTotal by remember { mutableStateOf<Double?>(null) }
scope_Find_Total.launch {
retrievedFindTotal = viewModel.getFindTotal()
}
Text("Find Total = $retrievedFindTotal")
}
所以,这段代码可以工作,但我认为我做错了,我收到一条警告“启动调用应该发生在 LaunchedEffect 内部,而不是组合内部”。此外,我想也许我不应该从我的用户界面启动协同例程?不确定我是否正确处理这件事?
警告实际上给出了相当好的提示。尝试将您的代码更改为
@Composable
fun BottomBar(viewModel: MainViewModel) {
val scope_Find_Total = rememberCoroutineScope()
var retrievedFindTotal by remember { mutableStateOf<Double?>(null) }
LaunchedEffect(Unit) {
retrievedFindTotal = viewModel.getFindTotal()
}
Text("Find Total = $retrievedFindTotal")
}