O que é Room e para que serve?
\n\nRoom é uma biblioteca para trabalhar com bancos de dados em aplicativos Android, escritos em Kotlin ou Java. Ela fornece uma camada de abstração sobre o SQLite, permitindo trabalhar com o banco de dados através de uma abordagem orientada a objetos, em vez de consultas SQL brutas.
\n\nPrincipais vantagens do Room:
\n- \n
- Minimização de código boilerplate — Room gera automaticamente o código para trabalhar com SQLite com base em anotações. \n
- Verificação de consultas SQL em tempo de compilação — erros nas consultas são detectados antes da execução do aplicativo. \n
- Integração com Coroutines e Flow — suporte a programação reativa e operações assíncronas. \n
- Migrações de banco de dados — mecanismos integrados para atualizar o esquema sem perda de dados. \n
- TypeConverters — possibilidade de armazenar tipos de dados complexos (por exemplo, Date, List) no banco. \n
Room é ideal para aplicativos que precisam de armazenamento local de dados estruturados: anotações, cache, configurações do usuário, modo offline, etc.
\n\nInstalação do Room
\n\nRoom não é instalado via pip ou npm, pois é uma biblioteca para Android. A adição ao projeto ocorre através do arquivo build.gradle (nível do módulo).
Passo 1: Adicione o plugin KSP (Kotlin Symbol Processing)
\nNo build.gradle raiz, adicione o plugin KSP:
plugins {\n id 'com.google.devtools.ksp' version '1.9.0-1.0.13' apply false\n}\n\nPasso 2: Conecte o Room no módulo do aplicativo
\nNo build.gradle do módulo app, adicione:
plugins {\n id 'com.android.application'\n id 'org.jetbrains.kotlin.android'\n id 'com.google.devtools.ksp'\n}\n\nandroid {\n // ... sua configuração\n}\n\ndependencies {\n def room_version = "2.6.1"\n\n implementation "androidx.room:room-runtime:$room_version"\n ksp "androidx.room:room-compiler:$room_version"\n implementation "androidx.room:room-ktx:$room_version" // Para Coroutines\n}\n\nApós sincronizar o Gradle, a biblioteca está pronta para uso.
\n\nInício rápido com exemplo de código
\n\nVamos criar um aplicativo simples para armazenar uma lista de tarefas (Todo).
\n\nPasso 1: Defina a entidade (Entity)
\nimport androidx.room.Entity\nimport androidx.room.PrimaryKey\n\n@Entity(tableName = "tasks")\ndata class Task(\n @PrimaryKey(autoGenerate = true)\n val id: Int = 0,\n val title: String,\n val description: String,\n val isCompleted: Boolean = false\n)\n\nPasso 2: Crie o DAO (Data Access Object)
\nimport androidx.room.*\nimport kotlinx.coroutines.flow.Flow\n\n@Dao\ninterface TaskDao {\n @Query("SELECT * FROM tasks ORDER BY id DESC")\n fun getAllTasks(): Flow<List<Task>>\n\n @Insert\n suspend fun insertTask(task: Task)\n\n @Update\n suspend fun updateTask(task: Task)\n\n @Delete\n suspend fun deleteTask(task: Task)\n}\n\nPasso 3: Crie o banco de dados
\nimport android.content.Context\nimport androidx.room.Database\nimport androidx.room.Room\nimport androidx.room.RoomDatabase\n\n@Database(entities = [Task::class], version = 1)\nabstract class AppDatabase : RoomDatabase() {\n abstract fun taskDao(): TaskDao\n\n companion object {\n @Volatile\n private var INSTANCE: AppDatabase? = null\n\n fun getDatabase(context: Context): AppDatabase {\n return INSTANCE ?: synchronized(this) {\n val instance = Room.databaseBuilder(\n context.applicationContext,\n AppDatabase::class.java,\n "app_database"\n ).build()\n INSTANCE = instance\n instance\n }\n }\n }\n}\n\nPasso 4: Use o
Também na biblioteca
Filas de tarefas para PHP: RabbitMQ, Beanstalkd e Gearman
Geolocalização e Mapas em JavaScript (Node.js): bibliotecas e ferramentas
GraphQL para Kotlin: bibliotecas poderosas para criar APIs
Play Services para Kotlin: guia completo com exemplos práticos
OneOf para C# (.NET): guia completo com exemplos