Ожидание завершения работы сопрограммы по запуску события | Kotlin/Jetpack Compose/Android/RoomAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Ожидание завершения работы сопрограммы по запуску события | Kotlin/Jetpack Compose/Android/Room

Сообщение Anonymous »

В моем коде есть Activity, отвечающее за создание новой записи в базе данных. В этом действии кнопка запускает сопрограмму для выполнения всех действий, связанных с базой данных, а когда это будет сделано, перейдите к другому действию, где вы просматриваете свое хранилище.
Сегодня мой первый опыт работы с сопрограммами, поэтому я не совсем понимаю, как все работает. Я пробовал различные комбинации приостановки и отключения функций, работу в GlobalScope, работу в области сопрограмм с поддержкой компоновки и т. д. Встроенный Gemini в Android Studio, как всегда, был скорее проблемой, чем помощником.
Итак, вот мой код... Если у кого-то есть опыт работы с сопрограммами, я был бы очень рад услышать ваше мнение... Заранее спасибо!!!!!!!!!!
Кнопка:

Код: Выделить всё

val localctx = LocalContext.current
val coroutineScope = rememberCoroutineScope()
Button(
onClick = {
var newEntryUuid = Uuid.random()
val newEntryUuidClone = newEntryUuid
coroutineScope.launch(Dispatchers.IO) {
if (newEntryViewModel.selectedEntryType == EntryTypes.Card)
newEntryUuid = newEntryViewModel.pushNewEntry(card = newEntryViewModel.createCard(), context =  localctx)
if (newEntryViewModel.selectedEntryType == EntryTypes.Account)
newEntryUuid = newEntryViewModel.pushNewEntry(account = newEntryViewModel.createAccount(), context = localctx)
newEntryViewModel.entryCreated.value = newEntryUuid != newEntryUuidClone
}
},
enabled = newEntryViewModel.allRequiredFieldsAreFilled,
colors = ButtonColors(
containerColor = MaterialTheme.colorScheme.primaryContainer,
contentColor = MaterialTheme.colorScheme.onPrimaryContainer,
disabledContainerColor = Color.LightGray,
disabledContentColor = Color.DarkGray
),
modifier = Modifier
.fillMaxWidth()
.padding(top = 16.dp)
) {
Text(stringResource(R.string.continue_button))
}
Spacer(
modifier = Modifier.height(80.dp)
)
}
Функции pushNewEntry:

Код: Выделить всё

@OptIn(DelicateCoroutinesApi::class)
suspend fun pushNewEntry(account: Account, context: Context): Uuid {
return withContext(Dispatchers.IO) {
val database = DatabaseProvider.getDatabase(context)

val newAccUuid = AccountManager.createAccount(
database = database,
account = account,
encryptionKey = VaultHandler().getEncryptionKey(context)
)

if (selectedFolderUuid != null) {
FolderManager.performEntryFolderOper(
database = database,
operation = FolderManager.EntryFolderOperations.Add,
entryUuid = newAccUuid,
targetFolderUuid = selectedFolderUuid as Uuid
)
}

newAccUuid
}
}
// the very same thing but with a card type
спасибо за помощь!


Подробнее здесь: https://stackoverflow.com/questions/798 ... pack-compo
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»