Saltar al contenido

Actualización de vistas de forma asíncrona

Si encuentras alguna parte que no comprendes puedes dejarlo en la sección de comentarios y trataremos de ayudarte lo mas rápido que podamos.

Solución:

Después de llamar books = task.await() estás fuera del hilo de la interfaz de usuario. Es porque usas CoroutineScope(Dispatchers.Default). cambiarlo a Dispatchers.Main:

fun loadData() = CoroutineScope(Dispatchers.Main).launch 
        loadingIndicator.visibility = View.VISIBLE
        val task = async(Dispatchers.IO) 
            get_top_books()
        
        books = task.await()
        viewAdapter.notifyDataSetChanged()
        loadingIndicator.visibility = View.INVISIBLE
    

Después de llamar books = task.await() estás fuera del hilo de la interfaz de usuario. Debe ejecutar todo el código relacionado con la interfaz de usuario en el hilo principal. Para hacer esto puedes usar Dispatchers.Main.

CoroutineScope(Dispatchers.Main).launch 
    viewAdapter.notifyDataSetChanged()
    loadingIndicator.visibility = View.INVISIBLE

o usando Handler

Handler(Looper.getMainLooper()).post  
    viewAdapter.notifyDataSetChanged()
    loadingIndicator.visibility = View.INVISIBLE

O puedes usar Activty instancia para llamar runOnUiThread método.

activity!!.runOnUiThread 
    viewAdapter.notifyDataSetChanged()
    loadingIndicator.visibility = View.INVISIBLE

Cambiando el Dispatchers.Default a Dispatchers.Main y actualizar mi versión de kotlinx-coroutines-android a 1.1.1 Hizo el truco.

Cambiando

val task = async(Dispatchers.IO) 
    get_top_books()

books = task.await()

a

books = withContext(Dispatchers.IO) 
    get_top_books()

también es un poco más elegante. Gracias a todos los que respondieron, especialmente a @DominicFischer, que tuvo la idea de verificar mis dependencias.

Valoraciones y reseñas

Al final de la artículo puedes encontrar las ilustraciones de otros administradores, tú todavía puedes mostrar el tuyo si te apetece.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *