Sandro Rigo

Propaganda
Sandro Rigo
[email protected]
Desenvolvimento de Aplicações Móveis
http://www.ic.unicamp.br/~sandro
1
Introdução
•  Alguns dados precisam ser persistidos
–  Contatos, preferências, bookmarks, etc ...
•  Armazenamento local ou nuvem?
–  Acesso rápido
–  Acesso offline
•  Usar como uma cache
•  Vamos usar um banco de dados SQLite
•  Referência: Learning Android, Cap 9.
Desenvolvimento de Aplicações Móveis
http://www.ic.unicamp.br/~sandro
2
SQLite
•  Não exige configuração
•  Conjunto de bibliotecas
–  Não tem servidor rodando
•  O banco fica em um único arquivo
–  Passa preocupações de segurança para o sistema de arquivos
–  Android tem um sandbox para cada aplicação
•  É open-source
Desenvolvimento de Aplicações Móveis
http://www.ic.unicamp.br/~sandro
3
SQLite
•  É possível usar outras soluções
–  JavaDB, MongoDB
–  Você teria que empacotar as bibliotecas necessárias com sua
aplicação
•  Interface Android
–  DbHelper
–  App usa-a para interagir com o banco
Desenvolvimento de Aplicações Móveis
http://www.ic.unicamp.br/~sandro
4
Aplicação em nosso exemplo
•  Armazenar localmente as atualizações
de status
•  Permitirá à aplicação mostrar as
atualizações mais rapidamente
–  Independente da rede
•  Teremos um serviço rodando em
background
–  Atualizar o BD periodicamente
•  Isto melhorará a experiência do usuário
Desenvolvimento de Aplicações Móveis
http://www.ic.unicamp.br/~sandro
5
Principais pontos
•  Conexão com o banco
–  Usaremos a classe SQLiteOpenHelper
–  Retorna uma instância de SQLiteDatabase
•  Esquema
–  Cada linha da tabela conterá os dados de um post
–  Colunas: ID, created_at, txt, user
–  Deve ser criado quando a aplicação inicia
•  Método onCreate() de DbHelper
–  Deve ter um número de versão
–  Método onUpgrade()
•  Usado quando o esquema muda
•  Nosso exemplo vai descartar a tabela
Desenvolvimento de Aplicações Móveis
http://www.ic.unicamp.br/~sandro
6
Quatro Operações Principais
•  DbHelper oferece:
–  Insert(), query(), update(), delete() -> CRUD
•  Por quê não usar SQL diretamente?
–  Segurança:
•  Sentenças SQL tomam entrada do usuário
•  SQL injection attack
–  Desempenho:
•  Executar sentenças SQL repetidamente é
custoso -> parser da sentença
–  Confiabilidade:
•  Métodos DbHelper são mais robustos
•  Erros SQL aparecem em tempo de execução
Desenvolvimento de Aplicações Móveis
http://www.ic.unicamp.br/~sandro
7
Cursores
•  Uma consulta retorna um conjunto de
linhas e um cursor
•  Você recupera os resultados, um por
vez, a partir do cursor
•  Você pode mover o cursor pelo
conjunto
Desenvolvimento de Aplicações Móveis
http://www.ic.unicamp.br/~sandro
8
Dica
•  Tudo que você faz com SQL pode gera
uma exceção SQL
–  Você está interagindo com um sistema fora de seu controle direto,
o banco
•  É importante você tratar as
SQLExceptions
–  Envolva todas as chamadas a banco em estruturas try/catch
–  Nem que seja para simpleste logar através de Log.e()
Desenvolvimento de Aplicações Móveis
http://www.ic.unicamp.br/~sandro
9
Nosso exemplo ...
•  Estenda a classe SQLiteOpenHelper
•  Implemente
–  Construtor
–  onCreate()
–  onUpgrade()
•  Altere o serviço UpdateService para
armazenar os dados no BD
Desenvolvimento de Aplicações Móveis
http://www.ic.unicamp.br/~sandro
10
Testando
•  Verifique se o BD foi criado
–  Ele ficará em /data/data/sua_app/databases/timeline.db
–  Use o DDMS File Explorer ou adb shell
•  Sqlite3
–  Instalado no Android
–  Use adb shell
–  Vá à pasta correta e execute sqlite3
–  Você pode fazer verificar o schema, tabelas e fazer um dump do
banco
•  Use o LogCat para identificar eventuais
exceções
Desenvolvimento de Aplicações Móveis
http://www.ic.unicamp.br/~sandro
11
Download