Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Não consigo atibuir valor para variavel - Problema com uso de Courotines

Não sei como compartilhar o código todo espero que com só isso alguém me ajude. Travei num projeto.

val notas = notasDao.buscaTodos()

Essa instrução visa atribuir uma lista de valores do banco de dados (room) a variável "notas". O código compila, mas ao executar quebra. Algo esperando já que o AppDataBase não esta com "AllowMainThread". Logo a solução é executar esse trecho numa Courotine.

var notas = emptyList<Notass>()
lifecycleScope.launch {
     notas = notasDao.buscaTodos()
}

Código compila e não quebra... único problema é que "notas" dentro da courotine tem valor mas fora permanece vazio.

Pergunto: Como fazer essa atribuição correta?

2 respostas

A solucao que encontrei por hora foi levar todo do código pra dentro da corotine

solução!

Olá, Fernando!

Entendo que você está enfrentando um problema ao atribuir valores a uma variável dentro de uma coroutine. É importante lembrar que as coroutines são assíncronas e executam em segundo plano, o que pode causar esse comportamento inesperado.

Uma possível solução para o seu caso é utilizar a função await() para aguardar a conclusão da coroutine e obter o valor desejado. Dessa forma, você pode fazer a atribuição correta à variável "notas" fora da coroutine. Veja um exemplo:

var notas = emptyList<Notass>()
lifecycleScope.launch {
    notas = notasDao.buscaTodos()
}.await()

// Agora a variável "notas" terá o valor correto

Com isso, você garante que a atribuição só será feita após a conclusão da coroutine, evitando que a variável permaneça vazia.

Espero que essa solução seja útil para você. Se tiver mais alguma dúvida, é só perguntar! Bons estudos!