• Nenhum resultado encontrado

Especialista em aplicações WEB – FUCAPI

N/A
N/A
Protected

Academic year: 2019

Share "Especialista em aplicações WEB – FUCAPI"

Copied!
90
0
0

Texto

(1)
(2)

Instrutor

● Programador desde 2000

● Aluno de doutorado

● Mestre em informática pelo

ICOMP/UFAM

● Especialista em aplicações

WEB – FUCAPI

(3)

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)

(4)

Model View Controller - MVC

MODEL CONTROLLER

Activities (.java)

(5)

M.Sc. Márcio Palheta

5/90

Model View Controller - MVC

(6)

Model View Controller - MVC

MODEL SQLite

VIEW

CONTROLLER Activities (.java)

Chamada de metodo() Evento

(7)

M.Sc. Márcio Palheta

7/90

Model View Controller - MVC

(8)
(9)

M.Sc. Márcio Palheta

9/90

Model View Controller - MVC

(10)
(11)

M.Sc. Márcio Palheta

11/90

Model View Controller - MVC

(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

(13)

M.Sc. Márcio Palheta

13/90

(14)
(15)

M.Sc. Márcio Palheta

15/90

Pensando na arquitetura do sistema

● Agora, no método onCreate() da nossa Activity,

(16)

Pensando na arquitetura do sistema

● Agora, no método onCreate() da nossa Activity,

(17)

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

(18)

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

(19)

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

(20)
(21)

M.Sc. Márcio Palheta

21/90

(22)

Exercício 02: A classe Helper

Novo pacotenossos Helpers para guardar

(23)

M.Sc. Márcio Palheta

23/90

Exercício 02: A classe Helper

Atributos que representam componentes de tela Novo pacote para guardar

nossos Helpers

(24)

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 guardar

nossos Helpers

(25)

M.Sc. Márcio Palheta

25/90

Exercício 02: A classe Helper

(continuação)

(26)

Exercício 02: A classe Helper

(continuação)

● Método construtor que recebe um FormularioActivity

O construtor recebe um

(27)

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

(28)

Exercício 02: A classe Helper

(continuação)

● Método construtor que recebe um FormularioActivity

O construtor recebe um

FormularioActivity

Associa atributos do helper a componentes de tela

(29)

M.Sc. Márcio Palheta

29/90

(30)

Exercício 02: A classe Helper

( Final )

Método que retorna Aluno

(31)

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

(32)

Exercício 02: A classe Helper

( Final )

Método que retorna Aluno

com dados vindos da Tela

Seta os atributos do Aluno

(33)

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

(34)
(35)

M.Sc. Márcio Palheta

35/90

(36)

Exercício 03: Usando o Helper na View

Definição do novo FormularioHelperatributo

Inicialização do helper, passando uma referência

(37)

M.Sc. Márcio Palheta

37/90

Exercício 03: Usando o Helper na View

Definição do novo FormularioHelperatributo

Inicialização do helper, passando uma referência

para o objeto atual(this)

(38)

Exercício 03: Usando o Helper na View

Definição do novo FormularioHelperatributo

Inicialização do helper, passando uma referência

para o objeto atual(this)

(39)

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,

(40)

Exercício 04: Classe AlunoDAO

(41)

M.Sc. Márcio Palheta

41/90

Exercício 04: Classe AlunoDAO

● Crie a classe para persistir dados do Aluno:

(42)

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

(43)

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 de persistência

(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

(45)

M.Sc. Márcio Palheta

45/90

(46)

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

Novas constantes para

controle manual de

(47)

M.Sc. Márcio Palheta

47/90

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

Novas constantes para

controle manual de

versão do BD

(48)

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

Novas constantes para

controle manual de

versão do BD

Registro da TAG de log padrão da nossa APP

(49)

M.Sc. Márcio Palheta

49/90

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

Novas constantes para

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

(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

(51)

M.Sc. Márcio Palheta

51/90

Exercício 06: Criação de tabelas

(52)

Exercício 06: Criação de tabelas

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

Definição do comando

(53)

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 comando

que será executado

(54)

Exercício 07: Atualização de tabelas

(55)

M.Sc. Márcio Palheta

55/90

Exercício 07: Atualização de tabelas

(56)
(57)

M.Sc. Márcio Palheta

57/90

Exercício 08: AlunoDAO.cadastrar()

Método que recebe um objeto Aluno e salva

(58)

Exercício 08: AlunoDAO.cadastrar()

Método que recebe um objeto Aluno e salva

seus dados no BD Objeto que guarda os

(59)

M.Sc. Márcio Palheta

59/90

Exercício 08: AlunoDAO.cadastrar()

Método que recebe um objeto Aluno e salva

seus dados no BD

Povoando o mapa de valores com [chave:valor] Objeto que guarda os

(60)

Exercício 08: AlunoDAO.cadastrar()

Método que recebe um objeto Aluno e salva

seus dados no BD

Povoando o mapa de valores com [chave:valor] Objeto que guarda os

valores que serão usados para salvar no BD

(61)

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

(62)
(63)

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:

(65)

M.Sc. Márcio Palheta

65/90

Exercício 10: método AlunoDAO.listar()

(66)

Exercício 10: método AlunoDAO.listar()

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

(67)

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

(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

(69)

M.Sc. Márcio Palheta

69/90

(70)
(71)

M.Sc. Márcio Palheta

71/90

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

registrosPercorre do todos osCursor

Carrega o objeto Aluno

(72)

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

registrosPercorre do todos osCursor

Carrega o objeto Aluno

com campos do Cursor

(73)

M.Sc. Márcio Palheta

73/90

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

registrosPercorre do todos osCursor

Carrega o objeto Aluno

com campos do Cursor

Adiciona o Aluno à coleção de resposta

android.database.SQLException

(74)

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

registrosPercorre do todos osCursor

Carrega o objeto Aluno

com campos do Cursor

Adiciona o Aluno à coleção de resposta

android.database.SQLException

(75)

M.Sc. Márcio Palheta

75/90

(76)

Exercício 12: Atualização da Tela inicial

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

(77)

M.Sc. Márcio Palheta

77/90

Exercício 13: camada de controle

● No método onCreate() da ListaAlunosActivity, deixe

(78)

Exercício 13: camada de controle

● No método onCreate() da ListaAlunosActivity, deixe

apenas a associação da ListView

Vamos manter a

(79)

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

(80)

Exercício 14: Mudança de tipos

● Nossa coleção de Alunos deve deixar de ser List<String>

e se tornar List<Aluno>

(81)

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>

(82)

Exercício 15: carga dos dados

● Na ListaAlunosActivity, crie o método carregarLista() para

(83)

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 paracarga da coleção

(84)

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 para carga da coleção

(85)

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 para carga da coleção

de alunos

(86)

Exercício 16: Carga no onResume()

● Na classe ListaAlunosActivity, vamos cria o método

onResume()

(87)

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

(89)

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:

(90)

Referências

Documentos relacionados

Aqui mostra todas as informações de estados de codificador FEB200, incluindo streaming de vídeo URL, os parâmetros de codificação, as informações do sinal HDMI, as informações

 Projeto: Nanoemulsões à base de óleo de copaíba (Copaifera multijuga Hayne): Desenvolvimento tecnológico, estudo de permeação cutânea, avaliação da atividade

Num estudo clínico realizado em doentes com diabetes tipo 2 e nefropatia, a incidência de hipercaliémia foi superior no grupo tratado com Cozaar em comparação com o grupo do

para tratar doentes com insuficiência cardíaca crónica, quando o tratamento com medicamentos específicos chamados inibidores da enzima de conversão da angiotensina (inibidores da

Em audiência pública promovida para a Região Sudeste pelo Ministério do Meio Ambiente (MMA), o SindusCon-SP apresentou uma série de sugestões de aperfeiçoamentos à versão

Necessidades Fisiológicas (fome, sede, sono, higiene, conforto, estimulação …) Necessidade de Segurança (defesa, protecção, estabilidade, ausência de dor,

Este Curso de Cabala – com noções de Hebraico &amp; Aramaico em quatro volumes é uma obra singular no gênero, seja em Português, Espanhol ou mesmo em Inglês, até onde o

constantemente postos em causa devido a alterações passageiras da situação existente no país de origem dos beneficiários, assegurando a estabilidade da sua