Pular para conteúdo

Aula 08 - Persistência de Dados 💾


💾 Onde guardamos os dados?

Apps precisam lembrar das coisas quando fechados.

  • Configurações simples.
  • Listas complexas.
  • Arquivos multimídia.

1. SharedPreferences 🔑

A forma mais simples: Chave e Valor.

  • "nome" -> "Ricardo"
  • "notificacoes_on" -> true
  • "tema" -> 1

Usando PreferenceManager

val prefs = getSharedPreferences("config", MODE_PRIVATE)

// Gravar
prefs.edit().putString("USER", "Android").apply()

// Ler
val user = prefs.getString("USER", "Ninguém")

Atenção: Não use para dados grandes ou listas!


🏛️ Banco de Dados: SQLite

O Android tem o SQLite no seu coração.

  • Banco Relacional.
  • Leve e embutido.
  • Mas... o código puro é horrível (SQL strings).

🔨 Conheça o ROOM

A biblioteca do Jetpack que salva vidas.

  1. Entity: Sua tabela (Classe de dados).
  2. DAO: Seus comandos (Queries).
  3. Database: O gerente do banco.

Passo 1: A Entidade (@Entity)

@Entity
data class User(
    @PrimaryKey val id: Int,
    val name: String
)

Passo 2: O DAO (@Dao)

@Dao
interface UserDao {
    @Insert
    void save(User user)

    @Query("SELECT * FROM User")
    LiveData<List<User>> getAll()
}

🧵 A Regra de Ouro do Banco

NUNCA acesse o banco na Main Thread.

  • O Room vai travar seu app (Crash) se você tentar.
  • Use Coroutines ou LiveData.
  • Por que? Porque ler o disco é lento e trava a tela.

🧬 Ciclo Completo: MVVM + Room

graph TD
    UI[Activity/View] -->|Observa| VM[ViewModel]
    VM -->|Pede| REPO[Repository]
    REPO -->|Query| DB[(Room DB)]
    DB -->|Retorna| REPO
    REPO -->|State| VM
    VM -->|LiveData| UI

📂 Arquivos Externos

Para fotos e vídeos.

  • Cache: Temporário.
  • Arquivos Privados: Só seu app vê.
  • Arquivos Públicos: Galeria, Downloads (Precisa de permissão).

🆚 Persistência: Android vs iOS

Recurso Android iOS
Simples SharedPreferences UserDefaults
Banco Room (SQLite) Core Data / SwiftData
Arquivos Scoped Storage Sandbox

🕵️ Ferramenta: App Inspection

No Android Studio, você pode ver o banco de dados ao vivo.

  1. Rode o app.
  2. Aba App Inspection -> Database Inspector.
  3. Você pode editar os dados e ver a tela do celular mudar! 🎩

🛠️ Prática: Lista de Tarefas

Vamos criar um banco para salvar textos.

  1. Configure o Room no build.gradle.
  2. Crie a Entity Task.
  3. Salve um texto vindo de um EditText.

Dica: O Singleton do Banco

Não crie várias instâncias do banco. Use o padrão Singleton.

val db = Room.databaseBuilder(
    applicationContext,
    AppDatabase::class.java, "database-name"
).build()

🏁 Conclusão

  • Escolha a ferramenta certa para o dado certo.
  • Room é o padrão para dados estruturados.
  • Sempre use threads de background (IO).

❓ Dúvidas sobre Dados?


Próxima Aula: Listas com RecyclerView! 📋👋