#android #android-jetpack-compose
Вопрос:
Есть ли лучший способ обновить текстовое значение здесь значением из базы данных?
@Composable
private fun DisplayShops() {
var shopid by remember { mutableStateOf("")}
SideEffect {
val value = GlobalScope.async {
val res = withContext(Dispatchers.Default) {
getDbData() // this gets the database data
delay(1000)
shopid=shop_id// the shop_id is variable defined in the activity and it has the value retrieved from the database
}
}
}
Text(text =shopid)
}
Ответ №1:
Это не очень хорошее решение по 2 причинам:
- код будет выполняться при каждой перекомпозиции, поскольку вы используете
SideEffect
, вы, вероятно, захотите использоватьLaunchedEffect
вместо этого - размещение вашей бизнес-логики в ваших составных материалах не является правильным решением, делает ваши составные материалы тесно связанными с вашим бизнес-уровнем и трудными для тестирования
Вам следует подумать о создании ViewModel
приложения, которое будет извлекать данные из базы данных, а затем предоставлять значение, которое вы хотите отобразить, с ViewMOdel
помощью MutableState
объекта, который вы затем можете наблюдать в своем компонуемом.
Вы можете прочитать это для получения более подробной информации.
Комментарии:
1. Большое спасибо! это сработало отлично, мне даже больше не нужна эта задержка.