SlideShare uma empresa Scribd logo
1 de 90
Baixar para ler offline
Capítulo 04: Persistência com SQLite
Instrutor
●

Programador desde 2000

●

Aluno de doutorado

●

●

●

●

Mestre em informática pelo
ICOMP/UFAM
Especialista em aplicações
WEB – FUCAPI
marcio.palheta@gmail.com
sites.google.com/site/marcio
palheta
M.Sc. Márcio Palheta
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)

M.Sc. Márcio Palheta

3/90
Model View Controller - MVC
Activities (.java)

CONTROLLER

VIEW
Layouts (.xml)

MODEL
DAO(.java)
Entidades(.java)
M.Sc. Márcio Palheta

4/90
Model View Controller - MVC
Activities (.java)
Evento

CONTROLLER

Chamada
de metodo()

modelo.getEstado()

VIEW
Layouts (.xml)

MODEL
DAO(.java)
Entidades(.java)
M.Sc. Márcio Palheta

5/90
Model View Controller - MVC
Activities (.java)
Evento

CONTROLLER

Chamada
de metodo()

modelo.getEstado()

VIEW
Layouts (.xml)

MODEL

SQLite

DAO(.java)
Entidades(.java)
M.Sc. Márcio Palheta

6/90
Model View Controller - MVC
Activities (.java)
Evento

CONTROLLER

Chamada
de metodo()

Exibir tela
modelo.getEstado()

VIEW
Layouts (.xml)

MODEL

SQLite

DAO(.java)
Entidades(.java)
M.Sc. Márcio Palheta

7/90
Model View Controller - MVC
Activities (.java)
Evento
Entrada de
dados

CONTROLLER

Chamada
de metodo()

Exibir tela
modelo.getEstado()

VIEW
Layouts (.xml)

MODEL

SQLite

DAO(.java)
Entidades(.java)
M.Sc. Márcio Palheta

8/90
Model View Controller - MVC
Activities (.java)
Evento
Entrada de
dados

CONTROLLER

Chamada
de metodo()

modelo.atualizarEstado()

Exibir tela
modelo.getEstado()

VIEW
Layouts (.xml)

MODEL

SQLite

DAO(.java)
Entidades(.java)
M.Sc. Márcio Palheta

9/90
Model View Controller - MVC
Activities (.java)
Evento
Entrada de
dados

CONTROLLER

Chamada
de metodo()

modelo.atualizarEstado()

Exibir tela
modelo.getEstado()

MODEL

VIEW
Layouts (.xml)

Notificação de
mudanças

SQLite

DAO(.java)
Entidades(.java)

M.Sc. Márcio Palheta

10/90
Model View Controller - MVC
Activities (.java)
Evento
Entrada de
dados

Exibir tela

CONTROLLER

tela.atualizarVisao()

Chamada
de metodo()

modelo.atualizarEstado()

modelo.getEstado()

MODEL

VIEW
Layouts (.xml)

Notificação de
mudanças

SQLite

DAO(.java)
Entidades(.java)

M.Sc. Márcio Palheta

11/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
M.Sc. Márcio Palheta

12/90
Exercício 01: Crie o JavaBean Aluno

M.Sc. Márcio Palheta

13/90
Exercício 01: implemente o bean Aluno

M.Sc. Márcio Palheta

14/90
Pensando na arquitetura do sistema
●

Agora, no método onCreate() da nossa Activity,
precisamos povoar um objeto Aluno com dados da tela:

M.Sc. Márcio Palheta

15/90
Pensando na arquitetura do sistema
●

Agora, no método onCreate() da nossa Activity,
Associa campos da tela
precisamos povoar um objeto Aluno com A referências de controle
dados da tela:

M.Sc. Márcio Palheta

16/90
Pensando na arquitetura do sistema
●

Agora, no método onCreate() da nossa Activity,
da tela
precisamos povoar um objeto Aluno comAssocia camposcontrole
dados da tela:
A referências de
Criação de um
objeto Aluno

M.Sc. Márcio Palheta

17/90
Pensando na arquitetura do sistema
●

Agora, no método onCreate() da nossa Activity,
da tela
precisamos povoar um objeto Aluno comAssocia camposcontrole
dados da tela:
A referências de
Criação de um
objeto Aluno

Povoar o novo Aluno com
dados vindos da tela

M.Sc. Márcio Palheta

18/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

M.Sc. Márcio Palheta

19/90
Exercício 02: A classe Helper

M.Sc. Márcio Palheta

20/90
Exercício 02: A classe Helper

Novo pacote para guardar
nossos Helpers

M.Sc. Márcio Palheta

21/90
Exercício 02: A classe Helper

Novo pacote para guardar
nossos Helpers

Clase Helper para o nosso
formulário

M.Sc. Márcio Palheta

22/90
Exercício 02: A classe Helper

Novo pacote para guardar
nossos Helpers

Clase Helper para o nosso
formulário

Atributos que representam
componentes de tela

M.Sc. Márcio Palheta

23/90
Exercício 02: A classe Helper

Novo pacote para guardar
nossos Helpers

Clase Helper para o nosso
formulário

Atributos que representam
componentes de tela

Atributo que que armazena
a referência a um Aluno

M.Sc. Márcio Palheta

24/90
Exercício 02: A classe Helper (continuação)
●

Método construtor que recebe um FormularioActivity

M.Sc. Márcio Palheta

25/90
Exercício 02: A classe Helper construtor recebe um
(continuação)
O
FormularioActivity
●

Método construtor que recebe um FormularioActivity

M.Sc. Márcio Palheta

26/90
Exercício 02: A classe Helper construtor recebe um
(continuação)
O
Associa atributos do helper
● a Método construtor
componentes de tela

FormularioActivity

que recebe um FormularioActivity

M.Sc. Márcio Palheta

27/90
Exercício 02: A classe Helper construtor recebe um
(continuação)
O
Associa atributos do helper
● a Método construtor
componentes de tela

FormularioActivity

que recebe um FormularioActivity

Criação do
objeto Aluno

M.Sc. Márcio Palheta

28/90
Exercício 02: A classe Helper

( Final )

M.Sc. Márcio Palheta

29/90
Exercício 02: A classe Helper

( Final )

Método que retorna Aluno
com dados vindos da Tela

M.Sc. Márcio Palheta

30/90
Exercício 02: A classe Helper

( Final )

Método que retorna Aluno
com dados vindos da Tela
Seta os atributos do Aluno
com campos da Tela

M.Sc. Márcio Palheta

31/90
Exercício 02: A classe Helper

( Final )

Método que retorna Aluno
com dados vindos da Tela
Seta os atributos do Aluno
com campos da Tela

Retorna uma referência
para um objeto Aluno
M.Sc. Márcio Palheta

32/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
M.Sc. Márcio Palheta

33/90
Exercício 03: Usando o Helper na View

M.Sc. Márcio Palheta

34/90
Exercício 03: Usando o Helper na View
Definição do novo atributo
FormularioHelper

M.Sc. Márcio Palheta

35/90
Exercício 03: Usando o Helper na View
Definição do novo atributo
FormularioHelper

Inicialização do helper,
passando uma referência
para o objeto atual(this)

M.Sc. Márcio Palheta

36/90
Exercício 03: Usando o Helper na View
Definição do novo atributo
FormularioHelper

Inicialização do helper,
passando uma referência
para o objeto atual(this)

Pedindo do Helper
uma referência a Aluno

M.Sc. Márcio Palheta

37/90
Exercício 03: Usando o Helper na View
Definição do novo atributo
FormularioHelper

Inicialização do helper,
passando uma referência
para o objeto atual(this)

Pedindo do Helper
uma referência a Aluno

Usando o novo objeto
Aluno

M.Sc. Márcio Palheta

38/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
M.Sc. Márcio Palheta

39/90
Exercício 04: Classe AlunoDAO
●

Crie a classe para persistir dados do Aluno:

M.Sc. Márcio Palheta

40/90
Exercício 04: Classe AlunoDAO
●

Novo pacote para
classes de persistência

Crie a classe para persistir dados do Aluno:

M.Sc. Márcio Palheta

41/90
Exercício 04: Classe AlunoDAO
●

Novo pacote para
classes de persistência

Crie a classe para persistir dados do Aluno:
Classe DAO para
persistir dados de
Alunos

M.Sc. Márcio Palheta

42/90
Exercício 04: Classe AlunoDAO
●

Novo pacote para
classes de persistência

Crie a classe para persistir dados do Aluno:
Classe DAO para
persistir dados de
Alunos

Filha da classe de
persistência
SQLiteOpenHelper

M.Sc. Márcio Palheta

43/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
M.Sc. Márcio Palheta

44/90
Exercício 05: Controle de versão do BD

M.Sc. Márcio Palheta

45/90
Exercício 05: Controle de versão do para
Novas constantes BD
controle manual de
versão do BD

M.Sc. Márcio Palheta

46/90
Exercício 05: Controle de versão do para
Novas constantes BD
controle manual de
versão do BD

Registro da TAG de log
padrão da nossa APP

M.Sc. Márcio Palheta

47/90
Exercício 05: Controle de versão do para
Novas constantes BD
controle manual de
versão do BD

Registro da TAG de log
padrão da nossa APP
Método construtor que
recebe apenas o Contexto

M.Sc. Márcio Palheta

48/90
Exercício 05: Controle de versão do para
Novas constantes BD
controle manual de
versão do BD

Registro da TAG de log
padrão da nossa APP
Método construtor que
recebe apenas o Contexto
Chamada ao construtor
da classe pai

M.Sc. Márcio Palheta

49/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
M.Sc. Márcio Palheta

50/90
Exercício 06: Criação de tabelas
●

Na classe AlunoDAO, crie o método onCreate():

M.Sc. Márcio Palheta

51/90
Exercício 06: Criação de tabelas
●

Na classe AlunoDAO, crie o método onCreate():
Definição do comando
que será executado

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 comando
que será executado

Execução da atualização
do banco de dados

M.Sc. Márcio Palheta

53/90
Exercício 07: Atualização de tabelas
●

Na classe AlunoDAO, crie o método onUpdate():

M.Sc. Márcio Palheta

54/90
Exercício 07: Atualização de tabelas
●

Na classe AlunoDAO, crie o método onUpdate():

M.Sc. Márcio Palheta

55/90
Exercício 08: AlunoDAO.cadastrar()

M.Sc. Márcio Palheta

56/90
Método que recebe um
objeto Aluno e salva
seus dados no BD

Exercício 08: AlunoDAO.cadastrar()

M.Sc. Márcio Palheta

57/90
Método que recebe um
objeto Aluno e salva
seus dados no BD

Objeto que guarda os
Exercícioserão usados
valores que 08: AlunoDAO.cadastrar()
para salvar no BD

M.Sc. Márcio Palheta

58/90
Método que recebe um
objeto Aluno e salva
seus dados no BD

Objeto que guarda os
Exercícioserão usados
valores que 08: AlunoDAO.cadastrar()
para salvar no BD

Povoando o mapa de
valores com [chave:valor]

M.Sc. Márcio Palheta

59/90
Método que recebe um
objeto Aluno e salva
seus dados no BD

Objeto que guarda os
Exercícioserão usados
valores que 08: AlunoDAO.cadastrar()
para salvar no BD

Povoando o mapa de
valores com [chave:valor]

Armazena os dados
do Aluno no banco

M.Sc. Márcio Palheta

60/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

M.Sc. Márcio Palheta

61/90
Exercício 09: Botão salvar

M.Sc. Márcio Palheta

62/90
Exercício 09: Botão salvar

M.Sc. Márcio Palheta

63/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()
M.Sc. Márcio Palheta

64/90
Exercício 10: método AlunoDAO.listar()
●

Início do método para recuperar Alunos do BD

M.Sc. Márcio Palheta

65/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

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
O Android recupera os
registros do SQLite
em um Cursor

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

Vetor de parâmetros da
consulta SQL

M.Sc. Márcio Palheta

68/90
Exercício 10: final do método listar()

M.Sc. Márcio Palheta

69/90
Percorre todos os
registros do Cursor

Exercício 10: final do método listar()

M.Sc. Márcio Palheta

70/90
Percorre todos os
registros do Cursor

Exercício 10: final do método listar()
Carrega o objeto Aluno
com campos do Cursor

M.Sc. Márcio Palheta

71/90
Percorre todos os
registros do Cursor

Exercício 10: final do método listar()
Carrega o objeto Aluno
com campos do Cursor

Adiciona o Aluno à
coleção de resposta

M.Sc. Márcio Palheta

72/90
Percorre todos os
registros do Cursor

Exercício 10: final do método listar()
Carrega o objeto Aluno
com campos do Cursor

Adiciona o Aluno à
coleção de resposta

android.database.SQLException
É filha de RuntimeException

M.Sc. Márcio Palheta

73/90
Percorre todos os
registros do Cursor

Exercício 10: final do método listar()
Carrega o objeto Aluno
com campos do Cursor

Adiciona o Aluno à
coleção de resposta

android.database.SQLException
É filha de RuntimeException

Garante o fechamento
da conexão com BD
M.Sc. Márcio Palheta
74/90
Exercício 11: Crie Aluno.toString()

M.Sc. Márcio Palheta

75/90
Exercício 12: Atualização da Tela inicial
●

Altere o arquivo: /res/layout/listaalunoslayout.xml

●

Deixe apenas a ListView

M.Sc. Márcio Palheta

76/90
Exercício 13: camada de controle
●

No método onCreate() da ListaAlunosActivity, deixe
apenas a associação da ListView

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
Vamos manter a
associação entre
view e controller

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
O código para carga da
coleção de alunos
ficará em outro método

M.Sc. Márcio Palheta

79/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

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

M.Sc. Márcio Palheta

81/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

M.Sc. Márcio Palheta

82/90
Exercício 15: carga dos dados
●

Na ListaAlunosActivity, crie o método carregarLista() para
Novo método para
acesso ao DAO e carga da coleção de Alunos
carga da coleção
de alunos

M.Sc. Márcio Palheta

83/90
Exercício 15: carga dos dados
●

Na ListaAlunosActivity, crie o método carregarLista() para
Novo método para
acesso ao DAO e carga da coleção de Alunos
carga da coleção
de alunos

Acesso à camada
de modelo

M.Sc. Márcio Palheta

84/90
Exercício 15: carga dos dados
●

Na ListaAlunosActivity, crie o método carregarLista() para
Novo método para
acesso ao DAO e carga da coleção de Alunos
carga da coleção
de alunos

Acesso à camada
de modelo

Atualização
da tela

M.Sc. Márcio Palheta

85/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()

M.Sc. Márcio Palheta

86/90
Execute a nossa App

M.Sc. Márcio Palheta

87/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
M.Sc. Márcio Palheta

88/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

M.Sc. Márcio Palheta

89/90
Capítulo 04: Persistência com SQLite

Mais conteúdo relacionado

Mais procurados

Sistema de conhecimento do trabalho
Sistema de conhecimento do trabalhoSistema de conhecimento do trabalho
Sistema de conhecimento do trabalhoDenilson Sousa
 
Regras do projeto final
Regras do projeto finalRegras do projeto final
Regras do projeto finalPacc UAB
 
Algoritmos e lp parte3-pseudocódigo
Algoritmos e lp parte3-pseudocódigoAlgoritmos e lp parte3-pseudocódigo
Algoritmos e lp parte3-pseudocódigoMauro Pereira
 
Auto- Regulação da Aprendizagem
Auto- Regulação da AprendizagemAuto- Regulação da Aprendizagem
Auto- Regulação da AprendizagemMaria Carvalho
 
Pseudocódigo ou Portugol (Lógica de Programação)
Pseudocódigo ou Portugol (Lógica de Programação)Pseudocódigo ou Portugol (Lógica de Programação)
Pseudocódigo ou Portugol (Lógica de Programação)Gercélia Ramos
 
Lista de exercicios algoritmos com pseudocodigo
Lista de exercicios   algoritmos com pseudocodigoLista de exercicios   algoritmos com pseudocodigo
Lista de exercicios algoritmos com pseudocodigoMauro Pereira
 
Aula 05 gestão da qualidade iv causa e efeito
Aula 05   gestão da qualidade iv causa e efeitoAula 05   gestão da qualidade iv causa e efeito
Aula 05 gestão da qualidade iv causa e efeitoedmarluis
 
A Fábrica de Aviões
A Fábrica de AviõesA Fábrica de Aviões
A Fábrica de AviõesLeandro Faria
 
Aprendizagem por reforço
Aprendizagem por reforçoAprendizagem por reforço
Aprendizagem por reforçoLuís Nunes
 
MASP - Método de Análise e Solução de Problemas
MASP - Método de Análise e Solução de ProblemasMASP - Método de Análise e Solução de Problemas
MASP - Método de Análise e Solução de ProblemasMárcio Hosken
 
Material de Apoio de Algoritmo e Lógica de Programação
Material de Apoio de Algoritmo e Lógica de ProgramaçãoMaterial de Apoio de Algoritmo e Lógica de Programação
Material de Apoio de Algoritmo e Lógica de Programaçãorodfernandes
 
Exercicios resolvidos visuAlg
Exercicios resolvidos visuAlgExercicios resolvidos visuAlg
Exercicios resolvidos visuAlgWillians Miyabara
 
Aula 03 estrutura de seleção
Aula 03   estrutura de seleçãoAula 03   estrutura de seleção
Aula 03 estrutura de seleçãoTácito Graça
 
Aula 5 encapsulamento, associação, polimorfismo, interfaces
Aula 5   encapsulamento, associação, polimorfismo, interfacesAula 5   encapsulamento, associação, polimorfismo, interfaces
Aula 5 encapsulamento, associação, polimorfismo, interfacesRafael Pinheiro
 
102773154 exercicios-de-fluxograma
102773154 exercicios-de-fluxograma102773154 exercicios-de-fluxograma
102773154 exercicios-de-fluxogramaMarcelo Ferreira
 
Sistema de suporte ao executivo
Sistema de suporte ao executivoSistema de suporte ao executivo
Sistema de suporte ao executivoDenilson Sousa
 

Mais procurados (20)

Sistema de conhecimento do trabalho
Sistema de conhecimento do trabalhoSistema de conhecimento do trabalho
Sistema de conhecimento do trabalho
 
Regras do projeto final
Regras do projeto finalRegras do projeto final
Regras do projeto final
 
Algoritmos em portugol
Algoritmos em portugolAlgoritmos em portugol
Algoritmos em portugol
 
Aula 3 algoritmos
Aula 3   algoritmosAula 3   algoritmos
Aula 3 algoritmos
 
Algoritmos e lp parte3-pseudocódigo
Algoritmos e lp parte3-pseudocódigoAlgoritmos e lp parte3-pseudocódigo
Algoritmos e lp parte3-pseudocódigo
 
Auto- Regulação da Aprendizagem
Auto- Regulação da AprendizagemAuto- Regulação da Aprendizagem
Auto- Regulação da Aprendizagem
 
Pseudocódigo ou Portugol (Lógica de Programação)
Pseudocódigo ou Portugol (Lógica de Programação)Pseudocódigo ou Portugol (Lógica de Programação)
Pseudocódigo ou Portugol (Lógica de Programação)
 
Lista de exercicios algoritmos com pseudocodigo
Lista de exercicios   algoritmos com pseudocodigoLista de exercicios   algoritmos com pseudocodigo
Lista de exercicios algoritmos com pseudocodigo
 
Aula 05 gestão da qualidade iv causa e efeito
Aula 05   gestão da qualidade iv causa e efeitoAula 05   gestão da qualidade iv causa e efeito
Aula 05 gestão da qualidade iv causa e efeito
 
Diagrama de ishikawa
Diagrama de ishikawaDiagrama de ishikawa
Diagrama de ishikawa
 
A Fábrica de Aviões
A Fábrica de AviõesA Fábrica de Aviões
A Fábrica de Aviões
 
Aprendizagem por reforço
Aprendizagem por reforçoAprendizagem por reforço
Aprendizagem por reforço
 
MASP - Método de Análise e Solução de Problemas
MASP - Método de Análise e Solução de ProblemasMASP - Método de Análise e Solução de Problemas
MASP - Método de Análise e Solução de Problemas
 
Material de Apoio de Algoritmo e Lógica de Programação
Material de Apoio de Algoritmo e Lógica de ProgramaçãoMaterial de Apoio de Algoritmo e Lógica de Programação
Material de Apoio de Algoritmo e Lógica de Programação
 
Exercicios resolvidos visuAlg
Exercicios resolvidos visuAlgExercicios resolvidos visuAlg
Exercicios resolvidos visuAlg
 
Aula 03 estrutura de seleção
Aula 03   estrutura de seleçãoAula 03   estrutura de seleção
Aula 03 estrutura de seleção
 
Aula 5 encapsulamento, associação, polimorfismo, interfaces
Aula 5   encapsulamento, associação, polimorfismo, interfacesAula 5   encapsulamento, associação, polimorfismo, interfaces
Aula 5 encapsulamento, associação, polimorfismo, interfaces
 
102773154 exercicios-de-fluxograma
102773154 exercicios-de-fluxograma102773154 exercicios-de-fluxograma
102773154 exercicios-de-fluxograma
 
O Método Kanban
O Método KanbanO Método Kanban
O Método Kanban
 
Sistema de suporte ao executivo
Sistema de suporte ao executivoSistema de suporte ao executivo
Sistema de suporte ao executivo
 

Destaque

Capítulo 08 - desenvolvimento de layouts customizados
Capítulo 08 - desenvolvimento de layouts customizadosCapítulo 08 - desenvolvimento de layouts customizados
Capítulo 08 - desenvolvimento de layouts customizadosMarcio Palheta
 
Capítulo 07 - Acesso a câmera e arquivos armazenados no device
Capítulo 07 - Acesso a câmera e arquivos armazenados no deviceCapítulo 07 - Acesso a câmera e arquivos armazenados no device
Capítulo 07 - Acesso a câmera e arquivos armazenados no deviceMarcio Palheta
 
Capítulo 01 - Fundamentos de Android e o HelloWorld
Capítulo 01 - Fundamentos de Android e o HelloWorldCapítulo 01 - Fundamentos de Android e o HelloWorld
Capítulo 01 - Fundamentos de Android e o HelloWorldMarcio Palheta
 
Introdução ao Python
Introdução ao PythonIntrodução ao Python
Introdução ao PythonMarcio Palheta
 
Capítulo 05 - Menus de Contexto e Exclusão de Aluno
Capítulo 05 - Menus de Contexto e Exclusão de AlunoCapítulo 05 - Menus de Contexto e Exclusão de Aluno
Capítulo 05 - Menus de Contexto e Exclusão de AlunoMarcio Palheta
 
Capítulo 03 - Formulários, menus e navegação entre telas
Capítulo 03 - Formulários, menus e navegação entre telasCapítulo 03 - Formulários, menus e navegação entre telas
Capítulo 03 - Formulários, menus e navegação entre telasMarcio Palheta
 
Capítulo 02 - Cadastro de Alunos e Decisões de Projeto
Capítulo 02 - Cadastro de Alunos e Decisões de ProjetoCapítulo 02 - Cadastro de Alunos e Decisões de Projeto
Capítulo 02 - Cadastro de Alunos e Decisões de ProjetoMarcio Palheta
 
Capítulo 12 - Fragments
Capítulo 12 - FragmentsCapítulo 12 - Fragments
Capítulo 12 - FragmentsMarcio Palheta
 
Capítulo 10 - Sincronização de dados usando JSON
Capítulo 10 - Sincronização de dados usando JSONCapítulo 10 - Sincronização de dados usando JSON
Capítulo 10 - Sincronização de dados usando JSONMarcio Palheta
 
Capítulo 06 - Comunicação entre Activities e Intents Implícitas
Capítulo 06 - Comunicação entre Activities e Intents ImplícitasCapítulo 06 - Comunicação entre Activities e Intents Implícitas
Capítulo 06 - Comunicação entre Activities e Intents ImplícitasMarcio Palheta
 
Capítulo 09 - Serviços em Background
Capítulo 09 - Serviços em BackgroundCapítulo 09 - Serviços em Background
Capítulo 09 - Serviços em BackgroundMarcio Palheta
 

Destaque (11)

Capítulo 08 - desenvolvimento de layouts customizados
Capítulo 08 - desenvolvimento de layouts customizadosCapítulo 08 - desenvolvimento de layouts customizados
Capítulo 08 - desenvolvimento de layouts customizados
 
Capítulo 07 - Acesso a câmera e arquivos armazenados no device
Capítulo 07 - Acesso a câmera e arquivos armazenados no deviceCapítulo 07 - Acesso a câmera e arquivos armazenados no device
Capítulo 07 - Acesso a câmera e arquivos armazenados no device
 
Capítulo 01 - Fundamentos de Android e o HelloWorld
Capítulo 01 - Fundamentos de Android e o HelloWorldCapítulo 01 - Fundamentos de Android e o HelloWorld
Capítulo 01 - Fundamentos de Android e o HelloWorld
 
Introdução ao Python
Introdução ao PythonIntrodução ao Python
Introdução ao Python
 
Capítulo 05 - Menus de Contexto e Exclusão de Aluno
Capítulo 05 - Menus de Contexto e Exclusão de AlunoCapítulo 05 - Menus de Contexto e Exclusão de Aluno
Capítulo 05 - Menus de Contexto e Exclusão de Aluno
 
Capítulo 03 - Formulários, menus e navegação entre telas
Capítulo 03 - Formulários, menus e navegação entre telasCapítulo 03 - Formulários, menus e navegação entre telas
Capítulo 03 - Formulários, menus e navegação entre telas
 
Capítulo 02 - Cadastro de Alunos e Decisões de Projeto
Capítulo 02 - Cadastro de Alunos e Decisões de ProjetoCapítulo 02 - Cadastro de Alunos e Decisões de Projeto
Capítulo 02 - Cadastro de Alunos e Decisões de Projeto
 
Capítulo 12 - Fragments
Capítulo 12 - FragmentsCapítulo 12 - Fragments
Capítulo 12 - Fragments
 
Capítulo 10 - Sincronização de dados usando JSON
Capítulo 10 - Sincronização de dados usando JSONCapítulo 10 - Sincronização de dados usando JSON
Capítulo 10 - Sincronização de dados usando JSON
 
Capítulo 06 - Comunicação entre Activities e Intents Implícitas
Capítulo 06 - Comunicação entre Activities e Intents ImplícitasCapítulo 06 - Comunicação entre Activities e Intents Implícitas
Capítulo 06 - Comunicação entre Activities e Intents Implícitas
 
Capítulo 09 - Serviços em Background
Capítulo 09 - Serviços em BackgroundCapítulo 09 - Serviços em Background
Capítulo 09 - Serviços em Background
 

Semelhante a Capítulo 04 - Persistência de dados com SQLite

Apostila php avancado
Apostila php avancadoApostila php avancado
Apostila php avancadoTiago Pereira
 
Aula de Orientação a Objetos - Herança com Java
Aula de Orientação a Objetos - Herança com JavaAula de Orientação a Objetos - Herança com Java
Aula de Orientação a Objetos - Herança com JavaJooMarcos614503
 
Desenvolvimento Web com PHP - Aula 3
Desenvolvimento Web com PHP - Aula 3Desenvolvimento Web com PHP - Aula 3
Desenvolvimento Web com PHP - Aula 3Thyago Maia
 
Workshop Django Framework - 30/10/2018
Workshop Django Framework - 30/10/2018Workshop Django Framework - 30/10/2018
Workshop Django Framework - 30/10/2018Rafael Sales Pavarina
 
plano_de_projeto_controlart_rascunho
plano_de_projeto_controlart_rascunhoplano_de_projeto_controlart_rascunho
plano_de_projeto_controlart_rascunhouserrx
 
Fundamentos da Programação PHP OO - Aula 1
Fundamentos da Programação PHP OO - Aula 1Fundamentos da Programação PHP OO - Aula 1
Fundamentos da Programação PHP OO - Aula 1Thyago Maia
 
Tutorial java orientação a objetos parte 1
Tutorial java orientação a objetos parte 1Tutorial java orientação a objetos parte 1
Tutorial java orientação a objetos parte 1Elaine Cecília Gatto
 
programacao-c-banco-de-dados
programacao-c-banco-de-dadosprogramacao-c-banco-de-dados
programacao-c-banco-de-dadosRaul Dias
 
Curso de Java (Parte 4)
Curso de Java (Parte 4)Curso de Java (Parte 4)
Curso de Java (Parte 4)Mario Sergio
 
Palestra MVC - Online tech day 2010
Palestra MVC - Online tech day 2010Palestra MVC - Online tech day 2010
Palestra MVC - Online tech day 2010Alexandre Tarifa
 
Plano de Projeto - Gerencia de Projetos
Plano de Projeto - Gerencia de ProjetosPlano de Projeto - Gerencia de Projetos
Plano de Projeto - Gerencia de ProjetosHelder Filho
 
PLANO DE PROJETO DE SOFTWARE para produtos da Lacertae SW
PLANO DE PROJETO DE SOFTWARE para produtos da Lacertae SWPLANO DE PROJETO DE SOFTWARE para produtos da Lacertae SW
PLANO DE PROJETO DE SOFTWARE para produtos da Lacertae SWInstituto Federal de Sergipe
 

Semelhante a Capítulo 04 - Persistência de dados com SQLite (20)

Apostila php avancado
Apostila php avancadoApostila php avancado
Apostila php avancado
 
Apostila php avancado
Apostila php avancadoApostila php avancado
Apostila php avancado
 
Aula de Orientação a Objetos - Herança com Java
Aula de Orientação a Objetos - Herança com JavaAula de Orientação a Objetos - Herança com Java
Aula de Orientação a Objetos - Herança com Java
 
Tutorial Java: Herança
Tutorial Java: HerançaTutorial Java: Herança
Tutorial Java: Herança
 
Programação Orientada por Objectos - Aula 2
Programação Orientada por Objectos - Aula 2Programação Orientada por Objectos - Aula 2
Programação Orientada por Objectos - Aula 2
 
Apostila geoinformações II
Apostila geoinformações IIApostila geoinformações II
Apostila geoinformações II
 
Desenvolvimento Web com PHP - Aula 3
Desenvolvimento Web com PHP - Aula 3Desenvolvimento Web com PHP - Aula 3
Desenvolvimento Web com PHP - Aula 3
 
Aula1
Aula1Aula1
Aula1
 
Workshop Django Framework - 30/10/2018
Workshop Django Framework - 30/10/2018Workshop Django Framework - 30/10/2018
Workshop Django Framework - 30/10/2018
 
plano_de_projeto_controlart_rascunho
plano_de_projeto_controlart_rascunhoplano_de_projeto_controlart_rascunho
plano_de_projeto_controlart_rascunho
 
Fundamentos da Programação PHP OO - Aula 1
Fundamentos da Programação PHP OO - Aula 1Fundamentos da Programação PHP OO - Aula 1
Fundamentos da Programação PHP OO - Aula 1
 
Tutorial java orientação a objetos parte 1
Tutorial java orientação a objetos parte 1Tutorial java orientação a objetos parte 1
Tutorial java orientação a objetos parte 1
 
Aplicacoes Rapidas Para Web Com Django
Aplicacoes Rapidas Para Web Com DjangoAplicacoes Rapidas Para Web Com Django
Aplicacoes Rapidas Para Web Com Django
 
programacao-c-banco-de-dados
programacao-c-banco-de-dadosprogramacao-c-banco-de-dados
programacao-c-banco-de-dados
 
Curso de Java (Parte 4)
Curso de Java (Parte 4)Curso de Java (Parte 4)
Curso de Java (Parte 4)
 
Palestra MVC - Online tech day 2010
Palestra MVC - Online tech day 2010Palestra MVC - Online tech day 2010
Palestra MVC - Online tech day 2010
 
Plano de Projeto - Gerencia de Projetos
Plano de Projeto - Gerencia de ProjetosPlano de Projeto - Gerencia de Projetos
Plano de Projeto - Gerencia de Projetos
 
PLANO DE PROJETO DE SOFTWARE para produtos da Lacertae SW
PLANO DE PROJETO DE SOFTWARE para produtos da Lacertae SWPLANO DE PROJETO DE SOFTWARE para produtos da Lacertae SW
PLANO DE PROJETO DE SOFTWARE para produtos da Lacertae SW
 
Plano deprojeto grupo1
Plano deprojeto grupo1Plano deprojeto grupo1
Plano deprojeto grupo1
 
Django Módulo Básico Parte II
Django Módulo Básico Parte IIDjango Módulo Básico Parte II
Django Módulo Básico Parte II
 

Capítulo 04 - Persistência de dados com SQLite

  • 2. Instrutor ● Programador desde 2000 ● Aluno de doutorado ● ● ● ● Mestre em informática pelo ICOMP/UFAM Especialista em aplicações WEB – FUCAPI marcio.palheta@gmail.com sites.google.com/site/marcio palheta M.Sc. Márcio Palheta
  • 3. 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) M.Sc. Márcio Palheta 3/90
  • 4. Model View Controller - MVC Activities (.java) CONTROLLER VIEW Layouts (.xml) MODEL DAO(.java) Entidades(.java) M.Sc. Márcio Palheta 4/90
  • 5. Model View Controller - MVC Activities (.java) Evento CONTROLLER Chamada de metodo() modelo.getEstado() VIEW Layouts (.xml) MODEL DAO(.java) Entidades(.java) M.Sc. Márcio Palheta 5/90
  • 6. Model View Controller - MVC Activities (.java) Evento CONTROLLER Chamada de metodo() modelo.getEstado() VIEW Layouts (.xml) MODEL SQLite DAO(.java) Entidades(.java) M.Sc. Márcio Palheta 6/90
  • 7. Model View Controller - MVC Activities (.java) Evento CONTROLLER Chamada de metodo() Exibir tela modelo.getEstado() VIEW Layouts (.xml) MODEL SQLite DAO(.java) Entidades(.java) M.Sc. Márcio Palheta 7/90
  • 8. Model View Controller - MVC Activities (.java) Evento Entrada de dados CONTROLLER Chamada de metodo() Exibir tela modelo.getEstado() VIEW Layouts (.xml) MODEL SQLite DAO(.java) Entidades(.java) M.Sc. Márcio Palheta 8/90
  • 9. Model View Controller - MVC Activities (.java) Evento Entrada de dados CONTROLLER Chamada de metodo() modelo.atualizarEstado() Exibir tela modelo.getEstado() VIEW Layouts (.xml) MODEL SQLite DAO(.java) Entidades(.java) M.Sc. Márcio Palheta 9/90
  • 10. Model View Controller - MVC Activities (.java) Evento Entrada de dados CONTROLLER Chamada de metodo() modelo.atualizarEstado() Exibir tela modelo.getEstado() MODEL VIEW Layouts (.xml) Notificação de mudanças SQLite DAO(.java) Entidades(.java) M.Sc. Márcio Palheta 10/90
  • 11. Model View Controller - MVC Activities (.java) Evento Entrada de dados Exibir tela CONTROLLER tela.atualizarVisao() Chamada de metodo() modelo.atualizarEstado() modelo.getEstado() MODEL VIEW Layouts (.xml) Notificação de mudanças SQLite DAO(.java) Entidades(.java) M.Sc. Márcio Palheta 11/90
  • 12. 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 M.Sc. Márcio Palheta 12/90
  • 13. Exercício 01: Crie o JavaBean Aluno M.Sc. Márcio Palheta 13/90
  • 14. Exercício 01: implemente o bean Aluno M.Sc. Márcio Palheta 14/90
  • 15. Pensando na arquitetura do sistema ● Agora, no método onCreate() da nossa Activity, precisamos povoar um objeto Aluno com dados da tela: M.Sc. Márcio Palheta 15/90
  • 16. Pensando na arquitetura do sistema ● Agora, no método onCreate() da nossa Activity, Associa campos da tela precisamos povoar um objeto Aluno com A referências de controle dados da tela: M.Sc. Márcio Palheta 16/90
  • 17. Pensando na arquitetura do sistema ● Agora, no método onCreate() da nossa Activity, da tela precisamos povoar um objeto Aluno comAssocia camposcontrole dados da tela: A referências de Criação de um objeto Aluno M.Sc. Márcio Palheta 17/90
  • 18. Pensando na arquitetura do sistema ● Agora, no método onCreate() da nossa Activity, da tela precisamos povoar um objeto Aluno comAssocia camposcontrole dados da tela: A referências de Criação de um objeto Aluno Povoar o novo Aluno com dados vindos da tela M.Sc. Márcio Palheta 18/90
  • 19. 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 M.Sc. Márcio Palheta 19/90
  • 20. Exercício 02: A classe Helper M.Sc. Márcio Palheta 20/90
  • 21. Exercício 02: A classe Helper Novo pacote para guardar nossos Helpers M.Sc. Márcio Palheta 21/90
  • 22. Exercício 02: A classe Helper Novo pacote para guardar nossos Helpers Clase Helper para o nosso formulário M.Sc. Márcio Palheta 22/90
  • 23. Exercício 02: A classe Helper Novo pacote para guardar nossos Helpers Clase Helper para o nosso formulário Atributos que representam componentes de tela M.Sc. Márcio Palheta 23/90
  • 24. Exercício 02: A classe Helper Novo pacote para guardar nossos Helpers Clase Helper para o nosso formulário Atributos que representam componentes de tela Atributo que que armazena a referência a um Aluno M.Sc. Márcio Palheta 24/90
  • 25. Exercício 02: A classe Helper (continuação) ● Método construtor que recebe um FormularioActivity M.Sc. Márcio Palheta 25/90
  • 26. Exercício 02: A classe Helper construtor recebe um (continuação) O FormularioActivity ● Método construtor que recebe um FormularioActivity M.Sc. Márcio Palheta 26/90
  • 27. Exercício 02: A classe Helper construtor recebe um (continuação) O Associa atributos do helper ● a Método construtor componentes de tela FormularioActivity que recebe um FormularioActivity M.Sc. Márcio Palheta 27/90
  • 28. Exercício 02: A classe Helper construtor recebe um (continuação) O Associa atributos do helper ● a Método construtor componentes de tela FormularioActivity que recebe um FormularioActivity Criação do objeto Aluno M.Sc. Márcio Palheta 28/90
  • 29. Exercício 02: A classe Helper ( Final ) M.Sc. Márcio Palheta 29/90
  • 30. Exercício 02: A classe Helper ( Final ) Método que retorna Aluno com dados vindos da Tela M.Sc. Márcio Palheta 30/90
  • 31. Exercício 02: A classe Helper ( Final ) Método que retorna Aluno com dados vindos da Tela Seta os atributos do Aluno com campos da Tela M.Sc. Márcio Palheta 31/90
  • 32. Exercício 02: A classe Helper ( Final ) Método que retorna Aluno com dados vindos da Tela Seta os atributos do Aluno com campos da Tela Retorna uma referência para um objeto Aluno M.Sc. Márcio Palheta 32/90
  • 33. 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 M.Sc. Márcio Palheta 33/90
  • 34. Exercício 03: Usando o Helper na View M.Sc. Márcio Palheta 34/90
  • 35. Exercício 03: Usando o Helper na View Definição do novo atributo FormularioHelper M.Sc. Márcio Palheta 35/90
  • 36. Exercício 03: Usando o Helper na View Definição do novo atributo FormularioHelper Inicialização do helper, passando uma referência para o objeto atual(this) M.Sc. Márcio Palheta 36/90
  • 37. Exercício 03: Usando o Helper na View Definição do novo atributo FormularioHelper Inicialização do helper, passando uma referência para o objeto atual(this) Pedindo do Helper uma referência a Aluno M.Sc. Márcio Palheta 37/90
  • 38. Exercício 03: Usando o Helper na View Definição do novo atributo FormularioHelper Inicialização do helper, passando uma referência para o objeto atual(this) Pedindo do Helper uma referência a Aluno Usando o novo objeto Aluno M.Sc. Márcio Palheta 38/90
  • 39. 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 M.Sc. Márcio Palheta 39/90
  • 40. Exercício 04: Classe AlunoDAO ● Crie a classe para persistir dados do Aluno: M.Sc. Márcio Palheta 40/90
  • 41. Exercício 04: Classe AlunoDAO ● Novo pacote para classes de persistência Crie a classe para persistir dados do Aluno: M.Sc. Márcio Palheta 41/90
  • 42. Exercício 04: Classe AlunoDAO ● Novo pacote para classes de persistência Crie a classe para persistir dados do Aluno: Classe DAO para persistir dados de Alunos M.Sc. Márcio Palheta 42/90
  • 43. Exercício 04: Classe AlunoDAO ● Novo pacote para classes de persistência Crie a classe para persistir dados do Aluno: Classe DAO para persistir dados de Alunos Filha da classe de persistência SQLiteOpenHelper M.Sc. Márcio Palheta 43/90
  • 44. 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 M.Sc. Márcio Palheta 44/90
  • 45. Exercício 05: Controle de versão do BD M.Sc. Márcio Palheta 45/90
  • 46. Exercício 05: Controle de versão do para Novas constantes BD controle manual de versão do BD M.Sc. Márcio Palheta 46/90
  • 47. Exercício 05: Controle de versão do para Novas constantes BD controle manual de versão do BD Registro da TAG de log padrão da nossa APP M.Sc. Márcio Palheta 47/90
  • 48. Exercício 05: Controle de versão do para Novas constantes BD controle manual de versão do BD Registro da TAG de log padrão da nossa APP Método construtor que recebe apenas o Contexto M.Sc. Márcio Palheta 48/90
  • 49. Exercício 05: Controle de versão do para Novas constantes BD controle manual de versão do BD Registro da TAG de log padrão da nossa APP Método construtor que recebe apenas o Contexto Chamada ao construtor da classe pai M.Sc. Márcio Palheta 49/90
  • 50. 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 M.Sc. Márcio Palheta 50/90
  • 51. Exercício 06: Criação de tabelas ● Na classe AlunoDAO, crie o método onCreate(): M.Sc. Márcio Palheta 51/90
  • 52. Exercício 06: Criação de tabelas ● Na classe AlunoDAO, crie o método onCreate(): Definição do comando que será executado M.Sc. Márcio Palheta 52/90
  • 53. Exercício 06: Criação de tabelas ● Na classe AlunoDAO, crie o método onCreate(): Definição do comando que será executado Execução da atualização do banco de dados M.Sc. Márcio Palheta 53/90
  • 54. Exercício 07: Atualização de tabelas ● Na classe AlunoDAO, crie o método onUpdate(): M.Sc. Márcio Palheta 54/90
  • 55. Exercício 07: Atualização de tabelas ● Na classe AlunoDAO, crie o método onUpdate(): M.Sc. Márcio Palheta 55/90
  • 57. Método que recebe um objeto Aluno e salva seus dados no BD Exercício 08: AlunoDAO.cadastrar() M.Sc. Márcio Palheta 57/90
  • 58. Método que recebe um objeto Aluno e salva seus dados no BD Objeto que guarda os Exercícioserão usados valores que 08: AlunoDAO.cadastrar() para salvar no BD M.Sc. Márcio Palheta 58/90
  • 59. Método que recebe um objeto Aluno e salva seus dados no BD Objeto que guarda os Exercícioserão usados valores que 08: AlunoDAO.cadastrar() para salvar no BD Povoando o mapa de valores com [chave:valor] M.Sc. Márcio Palheta 59/90
  • 60. Método que recebe um objeto Aluno e salva seus dados no BD Objeto que guarda os Exercícioserão usados valores que 08: AlunoDAO.cadastrar() para salvar no BD Povoando o mapa de valores com [chave:valor] Armazena os dados do Aluno no banco M.Sc. Márcio Palheta 60/90
  • 61. 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 M.Sc. Márcio Palheta 61/90
  • 62. Exercício 09: Botão salvar M.Sc. Márcio Palheta 62/90
  • 63. Exercício 09: Botão salvar M.Sc. Márcio Palheta 63/90
  • 64. 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() M.Sc. Márcio Palheta 64/90
  • 65. Exercício 10: método AlunoDAO.listar() ● Início do método para recuperar Alunos do BD M.Sc. Márcio Palheta 65/90
  • 66. 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 M.Sc. Márcio Palheta 66/90
  • 67. 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 M.Sc. Márcio Palheta 67/90
  • 68. 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 da consulta SQL M.Sc. Márcio Palheta 68/90
  • 69. Exercício 10: final do método listar() M.Sc. Márcio Palheta 69/90
  • 70. Percorre todos os registros do Cursor Exercício 10: final do método listar() M.Sc. Márcio Palheta 70/90
  • 71. Percorre todos os registros do Cursor Exercício 10: final do método listar() Carrega o objeto Aluno com campos do Cursor M.Sc. Márcio Palheta 71/90
  • 72. Percorre todos os registros do Cursor Exercício 10: final do método listar() Carrega o objeto Aluno com campos do Cursor Adiciona o Aluno à coleção de resposta M.Sc. Márcio Palheta 72/90
  • 73. Percorre todos os registros do Cursor Exercício 10: final do método listar() Carrega o objeto Aluno com campos do Cursor Adiciona o Aluno à coleção de resposta android.database.SQLException É filha de RuntimeException M.Sc. Márcio Palheta 73/90
  • 74. Percorre todos os registros do Cursor Exercício 10: final do método listar() Carrega o objeto Aluno com campos do Cursor Adiciona o Aluno à coleção de resposta android.database.SQLException É filha de RuntimeException Garante o fechamento da conexão com BD M.Sc. Márcio Palheta 74/90
  • 75. Exercício 11: Crie Aluno.toString() M.Sc. Márcio Palheta 75/90
  • 76. Exercício 12: Atualização da Tela inicial ● Altere o arquivo: /res/layout/listaalunoslayout.xml ● Deixe apenas a ListView M.Sc. Márcio Palheta 76/90
  • 77. Exercício 13: camada de controle ● No método onCreate() da ListaAlunosActivity, deixe apenas a associação da ListView M.Sc. Márcio Palheta 77/90
  • 78. 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 M.Sc. Márcio Palheta 78/90
  • 79. 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 O código para carga da coleção de alunos ficará em outro método M.Sc. Márcio Palheta 79/90
  • 80. 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 M.Sc. Márcio Palheta 80/90
  • 81. 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 M.Sc. Márcio Palheta 81/90
  • 82. Exercício 15: carga dos dados ● Na ListaAlunosActivity, crie o método carregarLista() para acesso ao DAO e carga da coleção de Alunos M.Sc. Márcio Palheta 82/90
  • 83. Exercício 15: carga dos dados ● Na ListaAlunosActivity, crie o método carregarLista() para Novo método para acesso ao DAO e carga da coleção de Alunos carga da coleção de alunos M.Sc. Márcio Palheta 83/90
  • 84. Exercício 15: carga dos dados ● Na ListaAlunosActivity, crie o método carregarLista() para Novo método para acesso ao DAO e carga da coleção de Alunos carga da coleção de alunos Acesso à camada de modelo M.Sc. Márcio Palheta 84/90
  • 85. Exercício 15: carga dos dados ● Na ListaAlunosActivity, crie o método carregarLista() para Novo método para acesso ao DAO e carga da coleção de Alunos carga da coleção de alunos Acesso à camada de modelo Atualização da tela M.Sc. Márcio Palheta 85/90
  • 86. Exercício 16: Carga no onResume() ● ● Na classe ListaAlunosActivity, vamos cria o método onResume() Nesse método, vamos fazer a chamada a carregarLista() M.Sc. Márcio Palheta 86/90
  • 87. Execute a nossa App M.Sc. Márcio Palheta 87/90
  • 88. 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 M.Sc. Márcio Palheta 88/90
  • 89. 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 M.Sc. Márcio Palheta 89/90