3
respostas

Migrar versão do banco em Kotlin

Como estou fazendo o curso em Kotlin, não consigo criar as classes de migração da mesma forma como o curso descreve. Temporariamente para conseguir seguir adiante no curso, criei a classe de migração separadamente em um Kotlin file onde ficariam todas essas classes de Migração, mas isso parece muito errado hehehe

Gostaria de saber como fazer a migração do banco de forma mais limpa quando se usa Kotlin.

Obrigado!

PS.: pra quem mais estiver fazendo o curso em Kotlin, O Java não consegue ler diretamente métodos estáticos no companion object do Kotlin. Por causa disso, é necessário anotar os métodos também com @JvmStatic na classe Converter para que o Room consiga acessar normalmente

3 respostas

Fala ao Guilherme, de boa?

Dá uma olhadinha como tenho feito em kotlin:


@Database(entities = [Tweet::class], version = 2)
abstract class TwittelumDatabase : RoomDatabase() {

    abstract fun tweetDao(): TweetDao


    companion object {

        private var database: TwittelumDatabase? = null

        private val DATABASE = "TwittelumDB"

        fun getInstance(context: Context): TwittelumDatabase {

            return database ?: criaBanco(context).also { database = it }

        }

        private fun criaBanco(context: Context): TwittelumDatabase {
            return Room.databaseBuilder(context, TwittelumDatabase::class.java, DATABASE)
                    .allowMainThreadQueries()
                    .addMigrations(Migration1Para2)
                    .build()
        }


    }
}

Ai a parte da migration:


object Migration1Para2 : Migration(1, 2) {

    override fun migrate(database: SupportSQLiteDatabase) {

        val sql = "alter table Tweet add column foto text"
        database.execSQL(sql)

    }
}

Faz sentido ?

Oi, Matheus! Obrigado pela resposta

Assim que puder eu testo a solução e marco tua resposta como resposta final.

Show, o que precisar dá um toque aqui :)