capítulo 04 - persistência de dados com sqlite
DESCRIPTION
Neste capítulo apresentamos estratégias para persistência de dados no Android. Itens discutidos: 1. Arquitetura MVC Mobile 2. Implementação do padrão de projeto View Helper 3. O Padrão de Projetos DAO e a classe SQLiteOpenHelper 4. Controle de versões de banco de dados 5. Mapeamento Objeto Relacional em AndroidTRANSCRIPT
![Page 1: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/1.jpg)
Capítulo 04: Persistência com SQLite
![Page 2: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/2.jpg)
M.Sc. Márcio Palheta
Instrutor
● Programador desde 2000
● Aluno de doutorado
● Mestre em informática pelo ICOMP/UFAM
● Especialista em aplicações WEB – FUCAPI
● sites.google.com/site/marciopalheta
![Page 3: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/3.jpg)
M.Sc. Márcio Palheta
3/90
Agenda
● MVC em Android
● Criação da camada de modelo - entidade Aluno
● Padrão de Projeto – View Helper
● Padrão de Projeto – Data Access Object (DAO)
● CRUD (Create, Read, Update, Delete)
![Page 4: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/4.jpg)
M.Sc. Márcio Palheta
4/90
Model View Controller - MVC
MODEL
CONTROLLER
Activities (.java)
DAO(.java)Entidades(.java)
VIEW
Layouts (.xml)
![Page 5: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/5.jpg)
M.Sc. Márcio Palheta
5/90
Model View Controller - MVC
MODELVIEW
Layouts (.xml)
CONTROLLER
Activities (.java)
DAO(.java)Entidades(.java)
Chamadade metodo()
Evento
modelo.getEstado()
![Page 6: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/6.jpg)
M.Sc. Márcio Palheta
6/90
Model View Controller - MVC
MODEL SQLiteVIEW
Layouts (.xml)
CONTROLLER
Activities (.java)
DAO(.java)Entidades(.java)
Chamadade metodo()
Evento
modelo.getEstado()
![Page 7: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/7.jpg)
M.Sc. Márcio Palheta
7/90
Model View Controller - MVC
MODEL SQLiteVIEW
Layouts (.xml)
CONTROLLER
Activities (.java)
DAO(.java)Entidades(.java)
Chamadade metodo()
Evento
Exibir tela
modelo.getEstado()
![Page 8: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/8.jpg)
M.Sc. Márcio Palheta
8/90
Model View Controller - MVC
MODEL SQLiteVIEW
Layouts (.xml)
CONTROLLER
Activities (.java)
DAO(.java)Entidades(.java)
Chamadade metodo()
Evento
Exibir tela
modelo.getEstado()
Entrada dedados
![Page 9: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/9.jpg)
M.Sc. Márcio Palheta
9/90
Model View Controller - MVC
MODEL SQLiteVIEW
Layouts (.xml)
CONTROLLER
Activities (.java)
DAO(.java)Entidades(.java)
Chamadade metodo()
Evento
Exibir tela
modelo.getEstado()
modelo.atualizarEstado()
Entrada dedados
![Page 10: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/10.jpg)
M.Sc. Márcio Palheta
10/90
Model View Controller - MVC
MODEL SQLiteVIEW
Layouts (.xml)
CONTROLLER
Activities (.java)
DAO(.java)Entidades(.java)
Chamadade metodo()
Evento
Exibir tela
modelo.getEstado()
modelo.atualizarEstado()
Entrada dedados
Notificação demudanças
![Page 11: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/11.jpg)
M.Sc. Márcio Palheta
11/90
Model View Controller - MVC
MODEL SQLiteVIEW
Layouts (.xml)
CONTROLLER
Activities (.java)
DAO(.java)Entidades(.java)
Chamadade metodo()
Evento
Exibir tela
modelo.getEstado()
modelo.atualizarEstado()
Entrada dedados
Notificação demudanças
tela.atualizarVisao()
![Page 12: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/12.jpg)
M.Sc. Márcio Palheta
12/90
Persistência com SQLite
● A tela de Listagem da nossa App permite o cadastro do nome dos alunos e os exibe em uma ListView
● Contudo, temos alguns problemas nessa abordagem:
– Os dados são perdidos quando a App é destruída
– Precisamos de outros dados para o Aluno● Como resposta, poderíamos:
– Persistir os dados em um Bando de Dados
– Usar a tela de Formulário para cadastro e alteração de dados do Aluno
![Page 13: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/13.jpg)
M.Sc. Márcio Palheta
13/90
Exercício 01: Crie o JavaBean Aluno
![Page 14: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/14.jpg)
M.Sc. Márcio Palheta
14/90
Exercício 01: implemente o bean Aluno
![Page 15: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/15.jpg)
M.Sc. Márcio Palheta
15/90
Pensando na arquitetura do sistema
● Agora, no método onCreate() da nossa Activity, precisamos povoar um objeto Aluno com dados da tela:
![Page 16: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/16.jpg)
M.Sc. Márcio Palheta
16/90
Pensando na arquitetura do sistema
● Agora, no método onCreate() da nossa Activity, precisamos povoar um objeto Aluno com dados da tela:Associa campos da tela
A referências de controle
![Page 17: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/17.jpg)
M.Sc. Márcio Palheta
17/90
Pensando na arquitetura do sistema
● Agora, no método onCreate() da nossa Activity, precisamos povoar um objeto Aluno com dados da tela:Associa campos da tela
A referências de controle
Criação de um objeto Aluno
Associa campos da telaA referências de controle
![Page 18: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/18.jpg)
M.Sc. Márcio Palheta
18/90
Pensando na arquitetura do sistema
● Agora, no método onCreate() da nossa Activity, precisamos povoar um objeto Aluno com dados da tela:Associa campos da tela
A referências de controle
Criação de um objeto Aluno
Povoar o novo Aluno comdados vindos da tela
![Page 19: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/19.jpg)
M.Sc. Márcio Palheta
19/90
Pensando na arquitetura do sistema
● A complexidade da Activity aumenta, à medida que novas funcionalidades forem implementadas
● É uma boa prática de programação isolarmos pequenas responsabilidades em outras classes
● Assim, a Activity passa a realizar o seu trabalho interagindo com pequenos especialistas
● Neste cenário, podemos implementar o padrão de projeto View Helper, que define a criação de classes especialistas em extrair e tratar dados das telas
![Page 20: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/20.jpg)
M.Sc. Márcio Palheta
20/90
Exercício 02: A classe Helper
![Page 21: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/21.jpg)
M.Sc. Márcio Palheta
21/90
Exercício 02: A classe HelperNovo pacote para guardar
nossos Helpers
![Page 22: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/22.jpg)
M.Sc. Márcio Palheta
22/90
Exercício 02: A classe HelperNovo pacote para guardar
nossos Helpers
Clase Helper para o nossoformulário
![Page 23: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/23.jpg)
M.Sc. Márcio Palheta
23/90
Exercício 02: A classe Helper
Atributos que representam componentes de tela
Novo pacote para guardarnossos Helpers
Clase Helper para o nossoformulário
![Page 24: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/24.jpg)
M.Sc. Márcio Palheta
24/90
Exercício 02: A classe Helper
Atributos que representam componentes de tela
Atributo que que armazena a referência a um Aluno
Novo pacote para guardarnossos Helpers
Clase Helper para o nossoformulário
![Page 25: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/25.jpg)
M.Sc. Márcio Palheta
25/90
Exercício 02: A classe Helper (continuação)
● Método construtor que recebe um FormularioActivity
![Page 26: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/26.jpg)
M.Sc. Márcio Palheta
26/90
Exercício 02: A classe Helper (continuação)
● Método construtor que recebe um FormularioActivity
O construtor recebe um FormularioActivity
![Page 27: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/27.jpg)
M.Sc. Márcio Palheta
27/90
Exercício 02: A classe Helper (continuação)
● Método construtor que recebe um FormularioActivity
O construtor recebe um FormularioActivity
Associa atributos do helpera componentes de tela
![Page 28: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/28.jpg)
M.Sc. Márcio Palheta
28/90
Exercício 02: A classe Helper (continuação)
● Método construtor que recebe um FormularioActivity
O construtor recebe um FormularioActivity
Associa atributos do helpera componentes de tela
Criação do objeto Aluno
![Page 29: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/29.jpg)
M.Sc. Márcio Palheta
29/90
Exercício 02: A classe Helper ( Final )
![Page 30: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/30.jpg)
M.Sc. Márcio Palheta
30/90
Exercício 02: A classe Helper ( Final )
Método que retorna Alunocom dados vindos da Tela
![Page 31: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/31.jpg)
M.Sc. Márcio Palheta
31/90
Exercício 02: A classe Helper ( Final )
Método que retorna Alunocom dados vindos da Tela
Seta os atributos do Alunocom campos da Tela
![Page 32: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/32.jpg)
M.Sc. Márcio Palheta
32/90
Exercício 02: A classe Helper ( Final )
Método que retorna Alunocom dados vindos da Tela
Seta os atributos do Alunocom campos da Tela
Retorna uma referência para um objeto Aluno
![Page 33: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/33.jpg)
M.Sc. Márcio Palheta
33/90
Usando o Helper
● Agora que nossa classe FormularioHelper está pronta, podemos utilizá-la na nossa classe de controle FormularioActivity
● Para isso, vamos criar um atributo FormularioHelper
● Criar um objeto Helper no método onCreate()
● Utilizar os dados do Aluno em qualquer método que necessite desse objeto (reuso)
● Em nosso exemplo, usaremos o click do botão para exibir o nome do aluno
![Page 34: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/34.jpg)
M.Sc. Márcio Palheta
34/90
Exercício 03: Usando o Helper na View
![Page 35: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/35.jpg)
M.Sc. Márcio Palheta
35/90
Exercício 03: Usando o Helper na ViewDefinição do novo atributoFormularioHelper
![Page 36: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/36.jpg)
M.Sc. Márcio Palheta
36/90
Exercício 03: Usando o Helper na ViewDefinição do novo atributoFormularioHelper
Inicialização do helper, passando uma referênciapara o objeto atual(this)
![Page 37: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/37.jpg)
M.Sc. Márcio Palheta
37/90
Exercício 03: Usando o Helper na ViewDefinição do novo atributoFormularioHelper
Inicialização do helper, passando uma referênciapara o objeto atual(this)
Pedindo do Helper uma referência a Aluno
![Page 38: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/38.jpg)
M.Sc. Márcio Palheta
38/90
Exercício 03: Usando o Helper na ViewDefinição do novo atributoFormularioHelper
Inicialização do helper, passando uma referênciapara o objeto atual(this)
Pedindo do Helper uma referência a Aluno
Usando o novo objetoAluno
![Page 39: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/39.jpg)
M.Sc. Márcio Palheta
39/90
Chegou a hora da persistência
● O ViewHelper extrai os dados de Aluno da tela
● Vamos armazenar esses dados em um Banco de Dados
● O Android vem com o banco relacional SQLite
● Para converter Objetos Java em Relações do banco de dados, vamos utilizar o padrão de projeto DAO
● DAO (Data Access Object) define que, para cada tabela do banco, criamos uma classe de perssitência
● Ex: para a tabela Aluno, teremos uma classe AlunoDAO, responsável pelo CRUD do aluno
![Page 40: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/40.jpg)
M.Sc. Márcio Palheta
40/90
Exercício 04: Classe AlunoDAO
● Crie a classe para persistir dados do Aluno:
![Page 41: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/41.jpg)
M.Sc. Márcio Palheta
41/90
Exercício 04: Classe AlunoDAO
● Crie a classe para persistir dados do Aluno:Novo pacote para
classes de persistência
![Page 42: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/42.jpg)
M.Sc. Márcio Palheta
42/90
Exercício 04: Classe AlunoDAO
● Crie a classe para persistir dados do Aluno:Novo pacote para
classes de persistência
Classe DAO para persistir dados de
Alunos
![Page 43: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/43.jpg)
M.Sc. Márcio Palheta
43/90
Exercício 04: Classe AlunoDAO
● Crie a classe para persistir dados do Aluno:Novo pacote para
classes de persistência
Classe DAO para persistir dados de
Alunos
Filha da classe depersistência
SQLiteOpenHelper
![Page 44: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/44.jpg)
M.Sc. Márcio Palheta
44/90
Mas nem tudo são flores
● Até o momento da elaboração deste treinamento, não havia um framework estável para tratar o Mapeamento Objeto Relacional (vulgo MOR) em Android
● Dito isto, só nos resta fazer o controle manual das versões do nosso Banco de Dados
● Vamos atualizar nossa classe AlunoDAO para inclusão de algumas constantes necessárias ao nosso controle de versões
● Em seguida, vamos começar a usar as constantes no construtor da classe AlunoDAO
![Page 45: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/45.jpg)
M.Sc. Márcio Palheta
45/90
Exercício 05: Controle de versão do BD
![Page 46: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/46.jpg)
M.Sc. Márcio Palheta
46/90
Exercício 05: Controle de versão do BDNovas constantes para controle manual de
versão do BD
![Page 47: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/47.jpg)
M.Sc. Márcio Palheta
47/90
Exercício 05: Controle de versão do BDNovas constantes para controle manual de
versão do BD
Registro da TAG de logpadrão da nossa APP
![Page 48: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/48.jpg)
M.Sc. Márcio Palheta
48/90
Exercício 05: Controle de versão do BDNovas constantes para controle manual de
versão do BD
Registro da TAG de logpadrão da nossa APP
Método construtor que recebe apenas o Contexto
![Page 49: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/49.jpg)
M.Sc. Márcio Palheta
49/90
Exercício 05: Controle de versão do BDNovas constantes para controle manual de
versão do BD
Registro da TAG de logpadrão da nossa APP
Método construtor que recebe apenas o Contexto
Chamada ao construtorda classe pai
![Page 50: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/50.jpg)
M.Sc. Márcio Palheta
50/90
Criação e atualização do BD
● Uma vez que o nosso controle de versão ocorre de forma manual, precisamos de métodos para criar e atualizar a estrutura das tabelas do nosso BD
● O método onCreate(SQLiteDatabase database) é invocado sempre que uma tabela não existir na base.
● Já o método onUpgrade(SQLiteDatabase database, int versaoAntiga, int versaoNova) é chamado quando precisamos atualizar a estrutura das tabelas
● Na nossa App, usaremos o OnUpgrade() para apagar e reconstruir a base
![Page 51: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/51.jpg)
M.Sc. Márcio Palheta
51/90
Exercício 06: Criação de tabelas
● Na classe AlunoDAO, crie o método onCreate():
![Page 52: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/52.jpg)
M.Sc. Márcio Palheta
52/90
Exercício 06: Criação de tabelas
● Na classe AlunoDAO, crie o método onCreate():
Definição do comandoque será executado
![Page 53: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/53.jpg)
M.Sc. Márcio Palheta
53/90
Exercício 06: Criação de tabelas
● Na classe AlunoDAO, crie o método onCreate():
Definição do comandoque será executado
Execução da atualização do banco de dados
![Page 54: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/54.jpg)
M.Sc. Márcio Palheta
54/90
Exercício 07: Atualização de tabelas
● Na classe AlunoDAO, crie o método onUpdate():
![Page 55: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/55.jpg)
M.Sc. Márcio Palheta
55/90
Exercício 07: Atualização de tabelas
● Na classe AlunoDAO, crie o método onUpdate():
![Page 56: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/56.jpg)
M.Sc. Márcio Palheta
56/90
Exercício 08: AlunoDAO.cadastrar()
![Page 57: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/57.jpg)
M.Sc. Márcio Palheta
57/90
Exercício 08: AlunoDAO.cadastrar()Método que recebe um
objeto Aluno e salvaseus dados no BD
![Page 58: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/58.jpg)
M.Sc. Márcio Palheta
58/90
Exercício 08: AlunoDAO.cadastrar()Método que recebe um
objeto Aluno e salvaseus dados no BD
Objeto que guarda os valores que serão usados
para salvar no BD
![Page 59: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/59.jpg)
M.Sc. Márcio Palheta
59/90
Exercício 08: AlunoDAO.cadastrar()Método que recebe um
objeto Aluno e salvaseus dados no BD
Povoando o mapa de valores com [chave:valor]
Objeto que guarda os valores que serão usados
para salvar no BD
![Page 60: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/60.jpg)
M.Sc. Márcio Palheta
60/90
Exercício 08: AlunoDAO.cadastrar()Método que recebe um
objeto Aluno e salvaseus dados no BD
Povoando o mapa de valores com [chave:valor]
Objeto que guarda os valores que serão usados
para salvar no BD
Armazena os dadosdo Aluno no banco
![Page 61: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/61.jpg)
M.Sc. Márcio Palheta
61/90
Atualização da FormularioActivity
● Agora que nossa camada de modelo está prepara para o cadastro do aluno, podemos atualizar nossa tela de formulário;
● No click do botão de Salvar, vamos:
– Pedir um objeto Aluno do Helper;
– Abrir uma conexão com BD, criando AlunoDAO;
– Cadastrar o novo Aluno no BD; e
– Fechar a conexão com o banco de dados
![Page 62: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/62.jpg)
M.Sc. Márcio Palheta
62/90
Exercício 09: Botão salvar
![Page 63: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/63.jpg)
M.Sc. Márcio Palheta
63/90
Exercício 09: Botão salvar
![Page 64: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/64.jpg)
M.Sc. Márcio Palheta
64/90
Queremos ver o que foi salvo
● Para visualizar os dados do banco de dados, precisamos atualizar as camadas de visão, controle e modelo
● Na camada de modelo, vamos criar o método listar()
● Vamos remover o EditText e Button das camadas de visão e controle
● Na camada de controle, precisamos alterar o método onCreate() da ListaAlunosActivity para chamar o método listar() da camada de modelo e apagar os métodos:
– onSaveInstanceState() e onRestoreInstanceState()
![Page 65: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/65.jpg)
M.Sc. Márcio Palheta
65/90
Exercício 10: método AlunoDAO.listar()
● Início do método para recuperar Alunos do BD
![Page 66: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/66.jpg)
M.Sc. Márcio Palheta
66/90
Exercício 10: método AlunoDAO.listar()
● Início do método para recuperar Alunos do BD
Instrução SQL para buscar todos os Alunos
![Page 67: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/67.jpg)
M.Sc. Márcio Palheta
67/90
Exercício 10: método AlunoDAO.listar()
● Início do método para recuperar Alunos do BD
Instrução SQL para buscar todos os Alunos
O Android recupera os registros do SQLite
em um Cursor
![Page 68: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/68.jpg)
M.Sc. Márcio Palheta
68/90
Exercício 10: método AlunoDAO.listar()
● Início do método para recuperar Alunos do BD
Instrução SQL para buscar todos os Alunos
O Android recupera os registros do SQLite
em um Cursor
Vetor de parâmetros daconsulta SQL
![Page 69: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/69.jpg)
M.Sc. Márcio Palheta
69/90
Exercício 10: final do método listar()
![Page 70: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/70.jpg)
M.Sc. Márcio Palheta
70/90
Exercício 10: final do método listar()Percorre todos os
registros do Cursor
![Page 71: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/71.jpg)
M.Sc. Márcio Palheta
71/90
Exercício 10: final do método listar()Percorre todos os
registros do Cursor
Carrega o objeto Alunocom campos do Cursor
![Page 72: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/72.jpg)
M.Sc. Márcio Palheta
72/90
Exercício 10: final do método listar()Percorre todos os
registros do Cursor
Carrega o objeto Alunocom campos do Cursor
Adiciona o Aluno àcoleção de resposta
![Page 73: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/73.jpg)
M.Sc. Márcio Palheta
73/90
Exercício 10: final do método listar()Percorre todos os
registros do Cursor
Carrega o objeto Alunocom campos do Cursor
Adiciona o Aluno àcoleção de resposta
android.database.SQLExceptionÉ filha de RuntimeException
![Page 74: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/74.jpg)
M.Sc. Márcio Palheta
74/90
Exercício 10: final do método listar()Percorre todos os
registros do Cursor
Carrega o objeto Alunocom campos do Cursor
Adiciona o Aluno àcoleção de resposta
android.database.SQLExceptionÉ filha de RuntimeException
Garante o fechamentoda conexão com BD
![Page 75: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/75.jpg)
M.Sc. Márcio Palheta
75/90
Exercício 11: Crie Aluno.toString()
![Page 76: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/76.jpg)
M.Sc. Márcio Palheta
76/90
Exercício 12: Atualização da Tela inicial
● Altere o arquivo: /res/layout/listaalunoslayout.xml
● Deixe apenas a ListView
![Page 77: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/77.jpg)
M.Sc. Márcio Palheta
77/90
Exercício 13: camada de controle
● No método onCreate() da ListaAlunosActivity, deixe apenas a associação da ListView
![Page 78: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/78.jpg)
M.Sc. Márcio Palheta
78/90
Exercício 13: camada de controle
● No método onCreate() da ListaAlunosActivity, deixe apenas a associação da ListView
Vamos manter a associação entre view e controller
![Page 79: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/79.jpg)
M.Sc. Márcio Palheta
79/90
Exercício 13: camada de controle
● No método onCreate() da ListaAlunosActivity, deixe apenas a associação da ListView
O código para carga da coleção de alunos
ficará em outro método
Vamos manter a associação entre view e controller
![Page 80: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/80.jpg)
M.Sc. Márcio Palheta
80/90
Exercício 14: Mudança de tipos
● Nossa coleção de Alunos deve deixar de ser List<String> e se tornar List<Aluno>
● Altere, também, o tipo do ArrayAdapter
![Page 81: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/81.jpg)
M.Sc. Márcio Palheta
81/90
Exercício 14: Mudança de tipos
● Nossa coleção de Alunos deve deixar de ser List<String> e se tornar List<Aluno>
● Altere, também, o tipo do ArrayAdapter
![Page 82: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/82.jpg)
M.Sc. Márcio Palheta
82/90
Exercício 15: carga dos dados
● Na ListaAlunosActivity, crie o método carregarLista() para acesso ao DAO e carga da coleção de Alunos
![Page 83: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/83.jpg)
M.Sc. Márcio Palheta
83/90
Exercício 15: carga dos dados
● Na ListaAlunosActivity, crie o método carregarLista() para acesso ao DAO e carga da coleção de AlunosNovo método para
carga da coleçãode alunos
![Page 84: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/84.jpg)
M.Sc. Márcio Palheta
84/90
Exercício 15: carga dos dados
● Na ListaAlunosActivity, crie o método carregarLista() para acesso ao DAO e carga da coleção de Alunos
Acesso à camada de modelo
Novo método paracarga da coleção
de alunos
![Page 85: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/85.jpg)
M.Sc. Márcio Palheta
85/90
Exercício 15: carga dos dados
● Na ListaAlunosActivity, crie o método carregarLista() para acesso ao DAO e carga da coleção de Alunos
Acesso à camada de modelo
Novo método paracarga da coleção
de alunos
Atualizaçãoda tela
![Page 86: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/86.jpg)
M.Sc. Márcio Palheta
86/90
Exercício 16: Carga no onResume()
● Na classe ListaAlunosActivity, vamos cria o método onResume()
● Nesse método, vamos fazer a chamada a carregarLista()
![Page 87: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/87.jpg)
M.Sc. Márcio Palheta
87/90
Execute a nossa App
![Page 88: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/88.jpg)
M.Sc. Márcio Palheta
88/90
O que vem a seguir?
● Complemento do cadastro - exclusão (ContextMenu)
● Compartilhar informações entre Activities – Intents
● Intent implicita – Chamada telefônica para um aluno
● Envio e Recebimento de SMS
● Navegar em site do Aluno e Envio de email
● Câmera e arquivos
● LayoutInflater
● Serviços de background
● Integração via JSON
![Page 89: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/89.jpg)
M.Sc. Márcio Palheta
89/90
Referências
● www.caelum.com.br● d.android.com● LECHETA, Ricardo. Google Android, 3a edição,
Novatec, São Paulo, 2013● Código fonte completo:
https://github.com/marciopalheta/cursosandroid
![Page 90: Capítulo 04 - Persistência de dados com SQLite](https://reader034.vdocuments.site/reader034/viewer/2022051400/5579a0ccd8b42ac1148b47ab/html5/thumbnails/90.jpg)
Capítulo 04: Persistência com SQLite