Estaba usando la biblioteca Android Room en mi proyecto para manipular datos de mi base de datos SQLite y todo funcionaba bien en la versión anterior de Kotlin (1.5.31). Aquí hay una muestra de mi DAO:
@Dao interface ServersDao { @Query("SELECT * FROM servers ORDER BY connectedDevices, ping ASC LIMIT 1") suspend fun getLeastLoadedServer(): Server @Query("SELECT * FROM servers ORDER BY ping, connectedDevices ASC LIMIT 1") suspend fun getNearestServer(): Server }Después de actualizar Kotlin a la versión 1.6.0, mi código ya no pudo compilarse y recibo este error:
error: no estoy seguro de cómo convertir un cursor al tipo de retorno de este método (java.lang.Object). public abstract java.lang.Object getLeastLoadedServer(@org.jetbrains.annotations.NotNull()
Después de buscar un poco, leí que se debía a la suspensión de funciones, así que eliminé la palabra clave de suspensión de mi DAO y comencé a recibir el error obvio:
java.lang.IllegalStateException: no se puede acceder a la base de datos en el subproceso principal, ya que podría bloquear la interfaz de usuario durante un largo período de tiempo.
Incluso si estuviera llamando a esas funciones desde una corrutina IO.
También leí el registro de cambios de Kotlin 1.6.0, que no ayudó mucho.
Cualquier ayuda es apreciada, gracias.
Usar Android Room 2.4.0 resolverá el problema.