Capítulo 04: Persistência com SQLite



Documentos relacionados
Capítulo 05: Menus de Contexto

Definições de Projeto

Capítulo 06: Trabalhando com Intents

Capítulo 07: Câmera e Arquivos

CONTEÚDO (técnico) COMPLETO DO TREINAMENTO INTENSIVO PARA ANDROID Universidade Android

Android Básico Hello World!

Capítulo 02: Cadastro de Alunos

Interfaces Gráficas parte 3

PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS

Desenvolvendo Aplicações Web com NetBeans

Figura 1. A Classe Java

PROJETO PEDAGÓGICO DE CURSOS

Integração de sistemas utilizando Web Services do tipo REST

Prof. Jhonatan Fernando

Manipulação de Dados em PHP (Visualizar, Inserir, Atualizar e Excluir) Parte 2

Acessando um Banco de Dados

Módulo 5 JPATransaction Camadas Turma Turma TurmaBC TurmaBC TurmaBC TurmaBC

Desenvolvimento de Aplicações para Internet Aula 8

Android e Bancos de Dados

Android Banco de Dados. Ivan Nicoli

Programação para Android. Aula 06: Activity, menus e action bar

UNIVERSIDADE TECNOLOGIA FEDERAL DO PARANÁ. Owncloud SERVIÇO DE COMPARTILHAMENTO EM NUVEM. Manual

Procedimentos para Instalação do Sisloc

A barra de menu a direita possibilita efetuar login/logout do sistema e também voltar para a página principal.

Listando itens em ComboBox e gravando os dados no Banco de Dados MySQL.

Procedimentos para Instalação do SISLOC

Programação para Android. Aula 08: Persistência de dados SQL

Procedimentos para Reinstalação do Sisloc

1 Criar uma entity a partir de uma web application que usa a Framework JavaServer Faces (JSF)

( TIAGO DOS SANTOS MENDES ) PROGRAMAÇÃO DISPOSITIVOS MOVEIS ANDROID STUDIO

Conteúdo. Disciplina: INF Engenharia de Software. Monalessa Perini Barcellos. Centro Tecnológico. Universidade Federal do Espírito Santo

O que é o Android? O que é o Android

Google Android para Tablets

Aula 1: Noção Básica e Criação de Tabelas.

MANUAL DO SISTEMA. Versão 1.00

Desenvolvimento de aplicação web com framework JavaServer Faces e Hibernate

EA998/MC933 Guido Araujo e Sandro Rigo

Trabalhando com conexão ao banco de dados MySQL no Lazarus. Prof. Vitor H. Migoto de Gouvêa Colégio IDESA 2011

Inserindo Dados no Banco de Dados Paradox.

Programação para Android. Aula 10: Acesso a câmera, sms e recursos do aparelho

Padrões de Projeto WEB e o MVC

PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS ARMAZENAMENTO EM BD NO DM. Prof. Angelo Augusto Frozza, M.Sc.

2 a Lista de Exercícios

Nova Central de Atendimento Logicorp

JavaServer Faces. Parte 2

Aplicativo web para definição do modelo lógico no projeto de banco de dados relacional

Manual de Utilização do Zimbra

Melhorias e Correções Patch's

Desenvolvimento para Android Prá3ca 3. Prof. Markus Endler

Fluxo de trabalho do Capture Pro Software: Indexação de código de barras e separação de documentos

Procedimento Documentado. Sistema de Homologação de Cobrança. Versão 1.0. Departamento de Produtos e Serviços Página 1

Escola Superior de Tecnologia de Setúbal. Projecto Final

ATIVIDADES PRÁTICAS SUPERVISIONADAS

JobScheduler Empresa: Assunto: Responsável: Dados de Contato: Suporte: Comercial: Financeiro:

Omega Tecnologia Manual Omega Hosting

Vamos criar uma nova Página chamada Serviços. Clique em Adicionar Nova.

Introdução ao Tableau Server 7.0

PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS ARMAZENAMENTO EM BD NO DM. Prof. Angelo Augusto Frozza, M.Sc.

MANUAL COTAÇAO WEB MANUAL MANUAL AVANÇO INFORMÁTICA AVANÇO INFORMÁTICA. [Digite seu endereço] [Digite seu telefone] [Digite seu endereço de ]

Programação WEB II. Sessions e Cookies. progweb2@thiagomiranda.net. Thiago Miranda dos Santos Souza

4 O Workflow e a Máquina de Regras

Manual Sistema Mó vel Msys Cómercial

Programação para Android. Aula 05: Estilos e temas; galeria de imagens

Microsoft Access XP Módulo Um

Programação para Dispositivos Móveis

Desenvolvimento de um aplicativo básico usando o Google Android

Introdução ao Android

Olá, esse é o manual feito para ajudar você a conhecer ainda mais o Painel Web que acompanha* App Kontrole.

Sumário. Parte I Introdução Introdução O Rails é ágil Explorando o conteúdo Agradecimentos... 19

Como atualizar os preços da ABCFarma.

Portal do Senac: Área Exclusiva para Alunos Manual de Navegação e Operação

Trabalhando com XML no SQL

MANUAL DE UTILIZAÇÃO SISTEMA DE CADASTRO INTRANET

O Novo Portal Etilux também foi criado para ser um facilitador para nossa Força de Vendas, abrangendo as seguintes características:

Manual do Usuário Nextel Cloud. Manual do Usuário. Versão Copyright Nextel

1 Cadastre-se Mozilla Firefox. AQUI Esqueci a senha Login Senha. Esqueci a senha Login Enviar Solicitação OBS: Nome: Login:

ABORDAGEM DE FRAMEWORKS PARA JSF QUE AUXILIAM O DESENVOLVIMENTO DE SOFTWARE

Manual do Usuário Cidadão SIC Serviço de informação ao cidadão

Sumário: Fluxo Operacional... 3 Contatos Agenda Online Reservas de Salas Tarefas... 42

INTRODUÇÃO À PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS. ADS 6º Período

Voltado para novos usuários, este capítulo fornece uma instrução para edição de Leiaute do SILAS e suas funções.

Guia de Início Rápido

CONFIGURAÇÃO DE REDE SISTEMA IDEAGRI - FAQ CONCEITOS GERAIS

Documento de Projeto de Sistema

CONTRA CONTROLE DE ACESSOS E MODULARIZADOR DE SISTEMAS

MANUAL DE INSTRUÇÕES. Versão 1.0. Visão Transportador

Hoje é inegável que a sobrevivência das organizações depende de dados precisos e atualizados.

02 - Usando o SiteMaster - Informações importantes

SISTEMA DE WORKFLOW PARA MODELAGEM E EXECUÇÃO DE PROCESSOS DE SOFTWARE. Aluno: Roberto Reinert Orientador: Everaldo A. Grahl

Android Core. Felipe Silveira felipesilveira.com.br. Aula 6

Como Utilizar o Escritório Virtual

Programação para Dispositivos Móveis

CARTILHA OFFICE 365. Secretaria de Estado de Educação do Rio de Janeiro. Subsecretaria de Infraestrutura e Tecnologia da Informação

Desenvolvendo Websites com PHP

USANDO O ROUNDCUBE WEBMAIL

Manual do Assinador de Documentos

Trecho retirando do Manual do esocial Versão 1.1

Transcrição:

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

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) 3/90

Model View Controller - MVC Activities (.java) CONTROLLER VIEW Layouts (.xml) MODEL DAO(.java) Entidades(.java) 4/90

Model View Controller - MVC Activities (.java) Evento CONTROLLER Chamada de metodo() modelo.getestado() VIEW Layouts (.xml) MODEL DAO(.java) Entidades(.java) 5/90

Model View Controller - MVC Activities (.java) Evento CONTROLLER Chamada de metodo() modelo.getestado() VIEW Layouts (.xml) MODEL SQLite DAO(.java) Entidades(.java) 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) 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) 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) 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) 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) 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 12/90

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

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

Pensando na arquitetura do sistema Agora, no método oncreate() da nossa Activity, precisamos povoar um objeto Aluno com dados da tela: 15/90

Pensando na arquitetura do sistema Agora, no método oncreate() da nossa Activity, campos da tela precisamos povoar um objeto Aluno com AAssocia dados da tela: referências de controle 16/90

Pensando na arquitetura do sistema Agora, no método oncreate() da nossa Activity, campos da tela precisamos povoar um objeto Aluno comaassocia dados da tela: referências de controle Criação de um objeto Aluno 17/90

Pensando na arquitetura do sistema Agora, no método oncreate() da nossa Activity, campos da tela precisamos povoar um objeto Aluno comaassocia dados da tela: referências de controle Criação de um objeto Aluno Povoar o novo Aluno com dados vindos da tela 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 19/90

Exercício 02: A classe Helper 20/90

Exercício 02: A classe Helper Novo pacote para guardar nossos Helpers 21/90

Exercício 02: A classe Helper Novo pacote para guardar nossos Helpers Clase Helper para o nosso formulário 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 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 24/90

Exercício 02: A classe Helper (continuação) Método construtor que recebe um FormularioActivity 25/90

Exercício 02: A classe HelperO construtor (continuação) recebe um FormularioActivity Método construtor que recebe um FormularioActivity 26/90

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

Exercício 02: A classe HelperO construtor (continuação) recebe um Associa atributos do helper a Método componentes de tela construtor FormularioActivity que recebe um FormularioActivity Criação do objeto Aluno 28/90

Exercício 02: A classe Helper ( Final ) 29/90

Exercício 02: A classe Helper ( Final ) Método que retorna Aluno com dados vindos da Tela 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 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 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 33/90

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

Exercício 03: Usando o Helper na View Definição do novo atributo FormularioHelper 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) 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 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 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 39/90

Exercício 04: Classe AlunoDAO Crie a classe para persistir dados do Aluno: 40/90

Exercício 04: Classe AlunoDAO Novo pacote para classes de persistência Crie a classe para persistir dados do Aluno: 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 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 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 44/90

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

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

Exercício 05: Controle de versão do para BD Novas constantes controle manual de versão do BD Registro da TAG de log padrão da nossa APP 47/90

Exercício 05: Controle de versão do para BD Novas constantes 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 48/90

Exercício 05: Controle de versão do para BD Novas constantes 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 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 50/90

Exercício 06: Criação de tabelas Na classe AlunoDAO, crie o método oncreate(): 51/90

Exercício 06: Criação de tabelas Na classe AlunoDAO, crie o método oncreate(): Definição do comando que será executado 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 53/90

Exercício 07: Atualização de tabelas Na classe AlunoDAO, crie o método onupdate(): 54/90

Exercício 07: Atualização de tabelas Na classe AlunoDAO, crie o método onupdate(): 55/90

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

Método que recebe um objeto Aluno e salva seus dados no BD Exercício 08: AlunoDAO.cadastrar() 57/90

Método que recebe um objeto Aluno e salva seus dados no BD Objeto que guarda os Exercício 08:usados AlunoDAO.cadastrar() valores que serão para salvar no BD 58/90

Método que recebe um objeto Aluno e salva seus dados no BD Objeto que guarda os Exercício 08:usados AlunoDAO.cadastrar() valores que serão para salvar no BD Povoando o mapa de valores com [chave:valor] 59/90

Método que recebe um objeto Aluno e salva seus dados no BD Objeto que guarda os Exercício 08:usados AlunoDAO.cadastrar() valores que serão para salvar no BD Povoando o mapa de valores com [chave:valor] Armazena os dados do Aluno no banco 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 61/90

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

Exercício 09: Botão salvar 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() 64/90

Exercício 10: método AlunoDAO.listar() Início do método para recuperar Alunos do BD 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 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 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 68/90

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

Percorre todos os registros do Cursor Exercício 10: final do método listar() 70/90

Percorre todos os registros do Cursor Exercício 10: final do método listar() Carrega o objeto Aluno com campos do Cursor 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 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 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 74/90

Exercício 11: Crie Aluno.toString() 75/90

Exercício 12: Atualização da Tela inicial Altere o arquivo: /res/layout/listaalunoslayout.xml Deixe apenas a ListView 76/90

Exercício 13: camada de controle No método oncreate() da ListaAlunosActivity, deixe apenas a associação da ListView 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 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 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 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 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 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 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 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 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() 86/90

Execute a nossa App 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 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 89/90

Capítulo 04: Persistência com SQLite