(VENDA E DISTRIBUIÇÃO PROIBIDA) De : Luciano Alves da Silva (
[email protected]) www.apostilaandroid.net
Rio de Janeiro Novembro 2012
1
Aviso sobre esta apostila Antes de iniciar a leitura deste material, veja esses avisos importantes: Esse material NÃO PODERÁ SER DISTRIBUÍDO, em hipótese alguma, em outros sites da Internet ou através outros processos/meios . Essa material , em hipótese alguma, NÃO PODE SER COMERCIALIZADO tanto pela Internet ou de forma impressa.
Se por acaso você ver este material sendo distribuído em outro site ou sendo comercializado (sem ser pelo site oficial da apostila), por favor, entre em contato com o autor (ver e-mail na primeira página).
2
Sobre o Autor da Apostila Luciano Alves da Silva é Bacharelado em Ciência da Computação pela UNISUAM e Pós-Graduado em Docência do Ensino Superior pelo Instituto A Vez do Mestre (Universidade Cândido Mendes - UCAM). Possui conhecimento e domínio das linguagens de programação Pascal, Java, C/C++, C#, Visual Basic, Delphi, PHP e HTML. Já criou Ambientes de Desenvolvimento Integrado (conhecidos como IDE) como o MakeWare (que trabalha com as linguagens Pascal, C++ e Java) e o AlgoWare (interpretador de algoritmos). É autor também dos seguintes livros, pela editora AGBOOK - Aprenda o a o a Programar em Android – Guia Essencial para Desenvolvedores - Desenvolvendo Jogos com a Plataforma XNA – Guia para Desenvolvedores. - Desenvolvendo Jogos com a Ferramenta RPG Maker VX– Guia do Usuário.
3
Apresentação Este material é dedicado para aqueles que desejam trabalhar com banco de dados usando o SQLite, presente na plataforma Android para o armazenamento e gerenciamento de dados.
Caso você, que esteja lendo este material, seja iniciante em programação com Android, recomendo antes adquirir no site oficial a “Apostila de Android – Programando o a o 5ª Edição”, pois esse material nada mais é do que um “complemento” da apostila citada. Agora caso você já possua conhecimento básico sobre programação com Android, e deseja aprender banco de dados, este material lhe dará todo o o a o para a construção de programas em Android que trabalhem com banco de dados.
4
Índice analítico
Capítulo 1 - Programação com Banco de Dados no Android....................... 6 1.1) A linguagem SQL .................................................................................... 6 1.1.1) O comando CREATE TABLE ............................................................ 7 1.1.2) O comando INSERT ......................................................................... 7 1.1.3) O comando UPDATE ........................................................................ 8 1.1.4) O comando DELETE......................................................................... 8 1.1.5) O comando SELECT......................................................................... 8 1.2) Trabalhando com o SQLite do Android ............................................... 9 1.2.1) O método query ................................................................................ 9 1.2.2) O método insert............................................................................... 10 1.2.3) O método update ............................................................................ 10 1.2.4) O método delete.............................................................................. 10 1.2.5) O método execSQL......................................................................... 11 1.3) Exemplos de SQL usando as funções do Android ........................... 11 1.3.1) Fazendo uma consulta a tabela (usando SELECT) ........................ 11 1.3.2) Inserindo dados (usando INSERT) ................................................. 12 1.3.3) Atualizando dados (usando UPDATE) ............................................ 12 1.3.4) Removendo dados (usando DELETE) ............................................ 13 1.3.5) Criando uma tabela (usando CREATE TABLE) .............................. 13 1.4) Desenvolvendo uma aplicação usando banco de dados................. 16 Conclusão a respeito do material ................................................................. 35
5
Capítulo 1 - Programação com Banco de Dados no Android
A
plataforma Android possui um mecanismo em que podemos trabalhar com banco de dados usando a linguagem SQL, o SQLite. Aqui neste material irei mostrar como trabalhar com banco de dados no Android.
Atualmente as aplicações Android (seja ela uma aplicação comercial, jogo e etc) sempre estão guardando informações (como por exemplo, o nome do cliente, endereço e etc). Essas informações são armazenadas normalmente em banco de dados, podendo esse banco ser on-line (situado em um servidor para essa finalidade) ou local (situado no próprio dispositivo). A plataforma Android já oferece (presente em sua arquitetura) um conjunto de recursos (bibliotecas e classes) que permite que nós possamos trabalhar com banco de dados (baseado no SQLite, um sistema gerenciador de banco de dados (SGBD)). Para trabalharmos com banco de dados, naturalmente, é preciso ter o conhecimento e o domínio da linguagem SQL (Structured Query Language), que é uma linguagem “padrão” voltada para trabalhar com BD. Antes de começarmos a trabalhar com BD no Android, precisamos conhecer e entender sobre está linguagem SQL.
1.1) A linguagem SQL A linguagem SQL (Structured Query Language) é uma linguagem de consulta estruturada que realiza consultas à banco de dados. A SQL é dividida em duas sub-linguagens: LMD (Linguagem de Manipulação de Dados ou Data Manipulation Language – DML) e LDD (Linguagem de Definição de Dados ou Data Definition Language – DDL) . A LDD é um conjunto de comandos dentro da SQL usada para a definição das estruturas de dados, fornecendo as instruções que permitem a criação, modificação e remoção das tabelas, assim como criação de índices. Já a LMD é o grupo de comandos dentro da linguagem SQL utilizado para a recuperação, inclusão, remoção e modificação de informações em bancos de dados. Vamos conhecer agora alguns comandos básicos muito utilizados da linguagem SQL.
6
1.1.1) O comando CREATE TABLE Esse comando serve para criar tabelas em banco de dados. Veja a sua sintaxe abaixo: create table
(
[
] [,
[
],...,
[
]])
Exemplo: Criar uma tabela chamada “cadastro” com os seguintes campos: - cod: Do tipo inteiro e com propriedades de chave primária e auto numeração. - nome : Do tipo texto e requerido - idade : Do tipo inteiro e requerido create table cadastro(cod integer primary key autoincrement, nome text not null, idade integer not null)
Outro exemplo : Criar uma tabela chamada “cadastro” (com os mesmos campos do exemplo acima) no banco de dados, se ela não existir. create table if not exists cadastro(cod integer primary key autoincrement, nome text not null, idade integer not null)
1.1.2) O comando INSERT Esse comando serve para inserir dados em uma tabela já existente. Veja a sua sintaxe abaixo: insert into
(
,...
) values(
,...,
)
Exemplo: Adicionar dados na tabela cadastro (que foi criada com o comando CREATE TABLE), conforme é mostrado abaixo: nome : Luciano idade : 23
7
OBS: Como o campo cod é do tipo auto-numeração, o valor dele já é definido automaticamente. insert into cadastro(nome,idade) values(’Luciano’,23)
1.1.3) O comando UPDATE Esse comando serve para atualizar dados de uma tabela já existente. Veja a sua sintaxe abaixo: update
set
=
[ ,...,
=
] where
Exemplo: Atualizar a idade do primeiro registro (Luciano) para 27 anos. update cadastro set idade = 27 where cod=1
1.1.4) O comando DELETE Esse comando serve para remover dados de uma tabela já existente. Veja a sua sintaxe abaixo: delete from
where
Exemplo: Remover o primeiro registro da tabela (Luciano) delete from cadastro where cod=1
1.1.5) O comando SELECT Esse comando serve para fazer consultas em uma tabela já existente. Veja a sua sintaxe abaixo: select
[,
,...,
] from
where
Exemplos : Mostrar todos os dados cadastrados na tabela 8
select cod,nome,idade from cadastro
Mostrar todos os nomes cuja idade seja maior que 25. select nome from cadastro where (idade >= 25)
Mostrar todos os nomes cujo prefixo seja ‘David’, ou melhor, todos que se chamam David independente do sobrenome. select nome from cadastro where (nome like ‘David%’)
A partir de agora vamos ver abaixo algumas funções do Android que trabalham com banco de dados.
1.2) Trabalhando com o SQLite do Android
No Android existe um pacote chamado “android.sqlite”, onde existe uma classe chamada SQLiteDataBase, que possui os seguintes métodos, conforme é mostrado em seguida: 1.2.1) O método query O método query realiza uma consulta SQL no banco de dados (equivale ao comando SELECT). Essa função retorna uma instância (objeto) do tipo Cursor. Vejamos a sintaxe do método em seguida: Cursor query(String
, String[]
, String
, String[] <selecionArgs>, String
, String
, String
)
Vamos conhecer os parâmetros que iremos utilizar dessa função:
: Neste parâmetro você informa o nome da tabela.
: Neste parâmetro a(s) coluna(s) que o banco possui.
: Aqui você informa a condição de busca de dados. Este parâmetro funciona como se fosse a clausula where do SQL, onde é informada a condição de busca. O restante dos parâmetros iremos trabalhar em seu valor null. 9
1.2.2) O método insert O método insert realiza uma inserção de dados na tabela (equivale ao comando INSERT). Vejamos a sintaxe deste método: long insert(String
)
,
String
,
ContentValues
Essa função possui três parâmetros:
: Neste parâmetro você informa o nome da tabela.
: O SQL não permite a inserção de linhas em branco, logo, se o valor de uma coluna for vazio, ele será iniciado com o valor null.
: Este parâmetro possui os valores a serem adicionados na tabela. 1.2.3) O método update
O método update realiza uma atualização de dados na tabela (equivale ao comando UPDATE). Vejamos agora a sintaxe deste método : int update(String
, ContentValues
, String
, String <argumentos_condicao>)
Essa função possui três parâmetros:
: Neste parâmetro você informa o nome da tabela.
: Este parâmetro possui os valores a serem adicionados na tabela.
: Aqui você informa a condição para a realização da atualização dos dados. <argumentos_condicao>: Aqui você informa os argumentos relativos à condição informada.
1.2.4) O método delete O método delete realiza a remoção de dados na tabela (equivale ao comando DELETE). Vejamos a sintaxe deste método: int delete(String <argumentos_condicao>)
,
String
,
String
Essa função possui três parâmetros: 10
: Neste parâmetro você informa o nome da tabela.
: Aqui você informa a condição para a realização da remoção dos dados da tabela. <argumentos_condicao>: Aqui você informa os argumentos relativos à condição informada.
1.2.5) O método execSQL O método execSQL executa uma consulta SQL (como CREATE TABLE, INSERT INTO, UPDATE, DELETE e etc.). Não é possível usar a clausula SELECT nesta função. Para esse tipo de situação, use o método query. Vejamos a sintaxe deste método: void execSQL(String sql)
Vamos fazer algumas comparações da função “execSQL”, que permite sintaxes de comando SQL com as demais funções, como “update”,”insert” e “delete” para a realização de uma consulta SQL.
1.3) Exemplos de SQL usando as funções do Android
1.3.1) Fazendo uma consulta a tabela (usando SELECT) - Comando SQL : select cod, nome, idade from cadastro
- Usando a função query : query(“cadastro”, (new String[] {“cod”,“nome”,“idade”}), null, null, null, null, null);
- Comando SQL : select nome from cadastro where idade > 24
11
- Usando a função query : query(“cadastro”, (new String[] {“nome”}),“idade > 24” , null, null, null, null);
1.3.2) Inserindo dados (usando INSERT)
- Comando SQL : insert into cadastro(nome,idade) values(‘Luciano’,23)
- Usando a função execSQL execSQL(“insert into cadastro(nome,idade) values(‘Luciano’,23);”);
Usando a função insert : ContentValues valor = new ContentValues(); valor.put(“nome”, “Luciano” ); valor.put(“idade”, “23”); insert(“cadastro”,null,valor);
1.3.3) Atualizando dados (usando UPDATE)
- Comando SQL : update cadastro set idade = 27 where cod=1
- Usando a função execSQL execSQL(“update cadastro set idade = 27 where (cod=1);”);
Usando a função update : ContentValues valor = new ContentValues(); valor.put(“idade”, “27”); update(“cadastro”,valor, “cod=1”);
12
1.3.4) Removendo dados (usando DELETE)
- Comando SQL : delete from cadastro where cod=1
- Usando a função execSQL execSQL(“delete from cadastro where (cod=1); “);
Usando a função delete : delete(“cadastro”, “cod=1”,null);
1.3.5) Criando uma tabela (usando CREATE TABLE) - Comando SQL : create table cadastro(cod integer primary key autoincrement, nome text not null, idade integer not null)
- Usando a função execSQL execSQL(“create table cadastro(cod integer primary autoincrement, nome text not null, idade integer not null);”);
key
Agora vamos conhecer as funções responsáveis por criar e abrir banco de dados no Android.
SQLDatabase openOrCreateDatabase(String CursorFactory cf);
nome_do_banco,int mode,
Essa função abre ou cria um novo banco de dados. Você deve especificar o nome do banco e o modo de abertura (somente leitura ; somente escrita e etc.) e um terceiro parâmetro, que normalmente é null. Veja um exemplo abaixo: SQLDatabase db; db = openOrCreateDatabase("dbbanco", Context.MODE_PRIVATE, null);
O comando acima abre ou cria o banco de dados chamado “dbbanco”. 13
Quando realizamos uma consulta do tipo SELECT usando a função query, ela retorna um objeto do tipo Cursor, onde nela estão armazenados os registros solicitados pela consulta. Vamos ver abaixo os métodos da classe Cursor:
Método
Descrição
boolean moveToFirst()
Move o cursor para o primeiro registro da tabela.
boolean moveToPrevious()
Move o cursor para o registro anterior da tabela.
boolean moveToNext()
Move o cursor para o próximo registro da tabela.
boolean moveToLast()
Move o cursor para o último registro da tabela.
int getCount() int getColumnIndex(String columnName)
String getColumnName(int columnIndex)
int getInt(int columnIndex)
float getFloat(int columnIndex)
double getDouble(int columnIndex)
short getShort(int columnIndex)
Retorna o número de registros da tabela. Retorna o índice da coluna na tabela, através do seu nome, que é ado como parâmetro. Retorna o nome da coluna na tabela, através do seu índice, que é ado como parâmetro. Retorna o valor do campo, tendo como seu parâmetro o seu índice, convertido em int. Lembre-se : o índice do primeiro campo é 0, o índice do segundo campo é 1 e assim por diante. Retorna o valor do campo, tendo como seu parâmetro o seu índice, convertido em float. Lembre-se : o índice do primeiro campo é 0, o índice do segundo campo é 1 e assim por diante. Retorna o valor do campo, tendo como seu parâmetro o seu índice, convertido em double. Lembre-se : o índice do primeiro campo é 0, o índice do segundo campo é 1 e assim por diante. Retorna o valor do campo, tendo como seu parâmetro o seu índice, convertido em short. Lembre-se : o índice do primeiro campo é 0, o índice do segundo campo é 1 e assim por diante.
14
Vou mostrar agora um exemplo para que você tenha um melhor entendimento do mecanismo de banco de dados do Android. Imagine uma tabela chamada “cadastro” com os seguintes dados abaixo: nome Amanda Bianca Bruna Carla
idade 32 30 23 20
Agora, observe a linha de código abaixo: SQLDatabase db; db = openOrCreateDatabase("dbbanco", Context.MODE_PRIVATE, null); Cursor c = db.query("cadastro", (new "idade < 32", null, null, null, null);
String[]
{"nome","idade"}),
Observe que a linha acima cria um objeto do tipo Cursor que vai receber o resultado da consulta da função query, que retorna uma instância do mesmo tipo. Logo, a instância retornada pela função query na verdade, retorna uma tabela resultante da consulta. Veja esse resultado abaixo: nome Bruna Carla
idade 23 20
Continuando a codificação. Veja a linha abaixo: c.moveToFirst();
A linha acima coloca o ponteiro no primeiro registro da tabela. A linha: String nome = c.getString(0);
Retorna o valor do campo “nome” do primeiro registro, no caso, “Bruna”. Veja agora a próxima linha: int idade = c.getInt(1);
Retorna o valor do campo “idade” do primeiro registro, no formato int. Neste caso, o valor retornado é 23. A linha: c.moveToNext();
15
A linha acima avança para o próximo registro. A linha: nome = c.getString(0);
Retorna o valor do campo “nome” do segundo registro, no caso, “Carla”. Veja agora a próxima linha: int idade = c.getInt(1);
Retorna o valor do campo “idade” do segundo registro, no formato int. Neste caso, o valor retornado é 20. Bom, com certeza você entendeu como funciona o mecanismo de manipulação de banco de dados no Android. Agora vamos por esse aprendizado na prática.
1.4) Desenvolvendo uma aplicação usando banco de dados Com o que já aprendemos neste capítulo (e também nós capítulos e tópicos anteriores) já podemos desenvolver uma aplicação mais interessante. Para tornar o aprendizado mais interessante vamos criar uma aplicação de cadastro de pessoas. Nessa aplicação o usuário vai informar os seguintes dados : nome, profissão e idade. Essa aplicação vai possuir três telas, cada uma com as seguintes funcionalidades: Tela principal (tela com opções): Nessa tela da aplicação teremos um menu que dará o ao cadastro do usuário e a visualização dos usuários cadastrados. Tela de cadastro: Nesse tela o usuário irá preencher os campos solicitados pela aplicação e em seguida o mesmo poderá cadastrar para que as informações sejam registradas. Tela de visualização de dados: Nessa tela poderão ser visualizados os dados (usuários) cadastrados. Se nada foi cadastrado na aplicação, será exibida uma mensagem informando essa situação. Nessa aplicação para armazenar os dados eu faço uso de uma estrutura de dados do tipo “lista” (duplamente encadeada). Nessa estrutura os dados são armazenados em sequência, e ados tanto sequencialmente e na sua ordem inversa de cadastro (avançando e retrocedendo pelos registros).
Bom, vamos construir a nossa aplicação. Crie um novo projeto com os seguintes dados abaixo: 16
Application Name: AplicacaoDeCadastroBD Project Name: AplicacaoDeCadastroBD Package Name : com.example.aplicacaodecadastrobd Build SDK : Android 2.2 (API 8) Minimum Required SDK : API 8: Android 2.2 (Froyo) Activity Name: AplicacaoCadastroActivity Layout Name : activity_aplicacao_cadastro Title : Aplicação de Cadastro (BD) Dentro da pasta “res/drawable-mdpi” coloque uma figura que represente o ícone da nossa aplicação. Para esta aplicação utilizei uma imagem de extensão PNG chamada “profile.png”. Altere a estrutura de layout da sua aplicação para o LinearLayout e em “APAGUE” o componente TextView. Feito isso adicione os seguintes componentes na sequência: ImageView Propriedade Src (imagem)
Valor profile.png
Propriedade
Valor Bem vindo a Aplicação de Cadastro de Pessoas.Este é um pequeno programa de demonstração de cadastro.Selecione uma das opções abaixo:
TextView
Text
Button Propriedade Id Width Text
Valor btcadastrarpessoas fill_parent Cadastrar pessoa
17
Button Propriedade Id Width Text
Valor btlistarpessoas fill_parent Listar pessoas cadastradas
Seguindo os os acima, a aplicação deve estar de acordo com a figura seguinte:
Layout da tela principal da aplicação Vejamos agora a estutura XML da tela principal da nossa aplicação:
18
<Button android:id="@+id/btcadastrarpessoa" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Cadastrar pessoa" /> <Button android:id="@+id/btlistarpessoas" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Listar pessoas cadastradas" />
Agora vamos criar mais uma tela (arquivo de layout XML) para nossa aplicação. Para isso vamos clicar com o botão direito sobre a pasta “layout” e em seguida vamos chamar o recurso de criação de arquivos de layout XML para Android (o “Android XML Layout File”, conforme já foi mostrado anteriormente no último exemplo). O nome do nosso arquivo de layout XML vai ser “cadastro” (a estrutura que vamos utilizar para essa tela será o LinearLayout). Depois de criado o arquivo vamos adicionar os seguintes componentes na sequência: ImageView Propriedade Src (Imagem)
Valor profile
Propriedade Text
Valor Módulo de cadastro.Digite seus dados abaixo:
Propriedade Text
Valor
TextView
TextView
Nome:
EditText (Plain Text) Propriedade Id Text
Valor ednome (Deixar em branco)
19
TextView Propriedade Text
Valor Profissão:
EditText (Plain Text) Propriedade Id Width Text
Valor edprofissao fill_parent (Deixar em branco)
TextView Propriedade Text
Valor Idade:
EditText (Plain Text) Propriedade Id Width Text
Valor edidade fill_parent (Deixar em branco)
Seguindo os os acima, a aplicação deve estar de acordo com a figura seguinte:
Layout da tela de cadastro Bom, ainda não acabou. Agora vamos adicionar uma estrutura LinearLayout (Horizontal) que será responsável por organizar os botões de forma horizontal 20
logo após a EditText que representa o campo “idade”. Após adicionar essa estrutura, modifique a seguintes propriedades dela, conforme abaixo: Propriedade Gravity
Valor center
A propriedade “Gravity” , similar a propriedade “Orientation”, determina o alinhamento dos componentes dentro da estrutura, que no caso acima está alinhando os componentes de forma centralizada, ou seja, os componentes vão estar dispostos de forma horizontal (um ao lado do outro) e todos esses componentes estarão organizados de forma centralizada. Seguindo o mesmo procedimento acima, vamos adicionar dois componentes do tipo Button dentro dessa estrutura, e vamos mudar as seguintes propriedades citadas abaixo.
Button Propriedade Id Text
Valor btcadastrar Cadastrar pessoa
Propriedade Id Text
Valor btcancelar Cancelar
Button
Seguindo os os acima, o Layout de nossa aplicação deve estar de acordo com a figura abaixo:
21
Layout da tela de cadastro Vamos ver agora a estrutura XML da tela de cadastro da aplicação:
<EditText android:id="@+id/ednome" android:layout_width="match_parent"
22
android:layout_height="wrap_content" > <requestFocus />
<EditText android:id="@+id/edprofissao" android:layout_width="match_parent" android:layout_height="wrap_content" />
<EditText android:id="@+id/edidade" android:layout_width="match_parent" android:layout_height="wrap_content" />
<Button android:id="@+id/btcadastrar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Cadastrar" />
<Button android:id="@+id/btcancelar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Cancelar" />
Agora vamos criar mais uma tela (arquivo de layout XML) para nossa aplicação. O nome da nossa tela vai se chamar “lista_pessoas_cadastradas”. 23
Após criar a tela da nossa aplicação, vamos adicionar os seguintes componentes na sequência:
ImageView Propriedade Src (Imagem)
Valor profile.png
TextView Propriedade Text Text size
Valor Lista de pessoas cadastradas. 20sp
Seguindo os os acima, o layout da aplicação deve estar de acordo com a figura seguinte:
Layout da tela de listagem de cadastrados Ainda não acabou. Vamos adicionar após o texto uma nova estrutura de layout do tipo LinearLayout (Horizontal), e em seguida vamos mudar as seguintes propriedades dela, conforme abaixo: LinearLayout Propriedade Id
Valor layoutNome
Agora dentro da estrutura “layoutNome” vamos adicionar os seguintes componentes na sequência:
24
TextView Propriedade Text Text color Text size
Valor Nome. #0000ff 20sp
TextView Propriedade Text Text size Id
Valor (Deixar em branco com espaços) 20sp txtnome
Logo após a estrutura LinearLayout que chamamos de “layoutNome”, vamos adicionar uma nova estrutura LinearLayout (Horizontal), e em seguida modifique as seguintes propriedades abaixo: Propriedade Id
Valor layoutProfissao
Agora dentro da estrutura “layoutProfissao” vamos adicionar os seguintes componentes na sequência: TextView Propriedade Text Text color Text size
Valor Profissão. #0000ff 20sp
TextView Propriedade Text Text size Id
Valor (Deixar em branco com espaços) 20sp txtprofissao
Agora vamos adicionar uma nova estrutura LinearLayout (Horizontal) e em seguida modifique as seguintes propriedades abaixo: Propriedade Id
Valor layoutIdade
25
Agora dentro da estrutura “layoutIdade” vamos adicionar os seguintes componentes na sequência: TextView Propriedade Text Text color Text size
Valor Idade. #0000ff 20sp
Propriedade Text Text color Text size Id
Valor (Deixar em branco com espaços) #ffffff 20sp txtidade
TextView
Agora vamos adicionar uma nova estrutura LinearLayout (Horizontal), como já foi mostrado acima. E depois, modifique as seguintes propriedades abaixo: Propriedade Id Gravity
Valor layoutBotoes Center
Agora dentro da estrutura “layoutBotoes” vamos adicionar os seguintes componentes na sequência: Button Propriedade Id Text
Valor btvoltar Voltar
Propriedade Id Text
Valor @+lista/btavancar Avançar
Button
Agora vamos adicionar um Button logo após a estrutura “layoutBotoes” que criamos com as seguintes propriedades abaixo: Button Propriedade Id Text Width
Valor btmenu_principal Menu principal fill_parent 26
Seguindo todos os os acima, o layout da aplicação deve estar de acordo com a figura abaixo:
Layout da tela de lista de pessoas cadastradas Vejamos agora a estrutura em XML da tela de listagem de pessoas cadastradas:
27
28
<Button android:id="@+id/btvoltar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Voltar" /> <Button android:id="@+id/btavancar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Avançar" />
<Button android:id="@+id/btmenu_principal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Menu principal" />
No arquivo “AplicacaoCadastroActivity.java”, vamos adicionar o seguinte código abaixo: package com.example.aplicacaodecadastrobd; import import import import import import import import import import
android.os.Bundle; android.app.Activity; android.app.AlertDialog; android.content.Context; android.database.Cursor; android.database.sqlite.SQLiteDatabase; android.view.View; android.widget.Button; android.widget.EditText; android.widget.TextView;
public class AplicacaoCadastroActivity extends Activity { Button btcadastarpessoa, btlistarpessoas; Button btcadastrar, btcancelar; Button btvoltar, btavancar, btmenu_principal; TextView txtnome,txtprofissao,txtidade; EditText ednome, edprofissao, edidade; SQLiteDatabase db; Cursor dados; int numero_registros = 0;
29
int posicao; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); try { db = openOrCreateDatabase("banco_dados", Context.MODE_PRIVATE, null); db.execSQL("create table if not exists cads (cod integer primary key autoincrement , nome text not null, profissao text not null, idade integer not null)");
} catch(Exception e) { ExibirMensagem(e.toString()); } CarregarTelaPrincipal(); } public void CarregarTelaPrincipal() { setContentView(R.layout. activity_aplicacao_cadastro); btcadastarpessoa = (Button) findViewById (R.id.btcadastrarpessoa); btlistarpessoas = (Button) findViewById (R.id.btlistarpessoas); btcadastarpessoa.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { CarregarTelaCadastro(); } }); btlistarpessoas.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { CarregarTelaListagemPessoas(); } }); }
30
public void CarregarTelaCadastro() {
setContentView(R.layout.cadastro); ednome = (EditText) findViewById(R.id.ednome); edprofissao = (EditText) findViewById (R.id.edprofissao); edidade = (EditText) findViewById(R.id.edidade); btcadastrar = (Button) findViewById (R.id.btcadastrar); btcancelar = (Button) findViewById (R.id.btcancelar); dados = db.query("cads",( new String[] {"nome","profissao","idade"}), null, null, null, null, null); numero_registros = dados.getCount(); btcadastrar.setOnClickListener(new View. OnClickListener() { @Override public void onClick(View arg0) { try { String nome = ednome.getText().toString(); String profissao = edprofissao. getText().toString(); String idade = edidade.getText(). toString(); numero_registros++; db.execSQL("insert into cads values(" + String.valueOf (numero_registros) +",'" + nome + "','" + profissao + "'," + idade + ")"); ExibirMensagem("Registro cadastrado com sucesso");
} catch(Exception e) { ExibirMensagem("Erro ao cadastrar"); } CarregarTelaPrincipal(); } });
31
btcancelar.setOnClickListener(new View. OnClickListener() { @Override public void onClick(View arg0) { CarregarTelaPrincipal(); } }); } public void CarregarTelaListagemPessoas() { try { dados = db.query("cads",( new String[] {"nome","profissao","idade"}), null, null, null, null, null); numero_registros = dados.getCount(); posicao = 1; }catch(Exception e) { ExibirMensagem("Erro ao obter dados do banco"); CarregarTelaPrincipal(); return; } if(numero_registros == 0) { ExibirMensagem("Nenhum registro cadastrado"); CarregarTelaPrincipal(); return; } else {
setContentView(R.layout.lista_pessoas_cadastradas); btvoltar = (Button) findViewById(R.id.btvoltar); btavancar = (Button) findViewById(R.id.btavancar); btmenu_principal = (Button) findViewById (R.id.btmenu_principal); txtnome = (TextView) findViewById(R.id.txtnome); txtprofissao = (TextView) findViewById (R.id.txtprofissao); txtidade = (TextView) findViewById(R.id.txtidade); dados.moveToFirst(); txtnome.setText(dados.getString (dados.getColumnIndex("nome")));
32
txtidade.setText(dados.getString (dados.getColumnIndex("idade"))); txtprofissao.setText(dados.getString (dados.getColumnIndex("profissao"))); btvoltar.setOnClickListener(new View. OnClickListener() { @Override public void onClick(View arg0) { if(posicao == 1) return; posicao--; dados.moveToPrevious(); txtnome.setText(dados.getString (dados.getColumnIndex("nome"))); txtidade.setText(dados.getString (dados.getColumnIndex("idade"))); txtprofissao.setText(dados.getString (dados.getColumnIndex("profissao")));
} });
btavancar.setOnClickListener(new View. OnClickListener() { @Override public void onClick(View arg0) { if(posicao == numero_registros) return; posicao++; dados.moveToNext(); txtnome.setText(dados.getString (dados.getColumnIndex("nome"))); txtidade.setText(dados.getString (dados.getColumnIndex("idade"))); txtprofissao.setText(dados.getString (dados.getColumnIndex("profissao")));
} }); btmenu_principal.setOnClickListener(new View. OnClickListener() {
33
@Override public void onClick(View v) { CarregarTelaPrincipal(); } });
} } public void ExibirMensagem(String mensagem){ AlertDialog.Builder dialogo = new AlertDialog. Builder(AplicacaoCadastroActivity.this); dialogo.setTitle("Aviso"); dialogo.setMessage(mensagem); dialogo.setNeutralButton("OK", null); dialogo.show(); } }
Após digitarmos os comandos da classe acima, execute a aplicação acima. O resultado você confere na imagem seguinte:
Aplicação em execução – Tela de cadastro
34
Conclusão material
a
respeito
do
Nesta apostila aprendemos a desenvolver aplicações em Android voltadas para Banco de Dados. Neste material aprendemos o que vem a ser a linguagem SQL e suas principais características, aprendemos os comandos básicos da linguagem (para a realização de consultas, atualizações de dados e etc.) e também como utilizá-las para a construção de aplicações voltadas para esse propósito, através do pacote oferecido pelo Android para o gerenciamento de Banco de Dados. No final, desenvolvemos uma aplicação que faz uso do Banco de Dados para o armazenamento de gerenciamento de dados pessoais.
Espero que esse material lhe tenha sido útil.
Abraços
35