Você está na página 1de 35

1

(VENDA E DISTRIBUIO PROIBIDA)



De : Luciano Al ves da Silva (lucianopascal@yahoo.com.br)

www.apostilaandroid.net
















Rio de Janeiro
Novembro 2012



2



Aviso sobre esta apostila


Antes de iniciar a leitura deste material, veja esses avisos importantes:

Esse material NO PODER SER DISTRIBUDO, em hiptese alguma, em
outros sites da Internet ou atravs outros processos/meios .

Essa material , em hiptese alguma, NO PODE SER COMERCIALIZADO
tanto pela Internet ou de forma impressa.



Se por acaso voc ver este material sendo distribudo 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 pgina).

3



Sobre o Autor da Apostila


Luciano Alves da Silva Bacharelado em Cincia da Computao pela
UNISUAM e Ps-Graduado em Docncia do Ensino Superior pelo Instituto A
Vez do Mestre (Universidade Cndido Mendes - UCAM). Possui conhecimento
e domnio das linguagens de programao Pascal, J ava, 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 J ava) e o AlgoWare (interpretador de algoritmos).

autor tambm dos seguintes livros, pela editora AGBOOK

- Aprenda Passo a Passo a Programar em Android Guia Essencial para
Desenvolvedores

- Desenvolvendo J ogos com a Plataforma XNA Guia para Desenvolvedores.

- Desenvolvendo J ogos com a Ferramenta RPG Maker VX Guia do Usurio.

4




Apresentao

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 programao com
Android, recomendo antes adquirir no site oficial a Apostila de Android
Programando Passo a Passo 5 Edio, pois esse material nada mais do
que um complemento da apostila citada. Agora caso voc j possua
conhecimento bsico sobre programao com Android, e deseja aprender
banco de dados, este material lhe dar todo o passo a passo para a construo
de programas em Android que trabalhem com banco de dados.


5


ndice analtico




Captulo 1 - Programao 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 mtodo query ................................................................................ 9
1.2.2) O mtodo insert............................................................................... 10
1.2.3) O mtodo update ............................................................................ 10
1.2.4) O mtodo delete.............................................................................. 10
1.2.5) O mtodo execSQL ......................................................................... 11
1.3) Exemplos de SQL usando as funes 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) Desenvol vendo uma aplicao usando banco de dados ................. 16
Concluso a respeito do material ................................................................. 35


6



Captulo 1 - Programao com
Banco de Dados no Android


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 aplicaes Android (seja ela uma aplicao comercial, jogo e
etc) sempre esto guardando informaes (como por exemplo, o nome do
cliente, endereo e etc). Essas informaes so armazenadas normalmente em
banco de dados, podendo esse banco ser on-line (situado em um servidor para
essa finalidade) ou local (situado no prprio dispositivo).

A plataforma Android j oferece (presente em sua arquitetura) um conjunto de
recursos (bibliotecas e classes) que permite que ns 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 domnio da linguagem SQL (Structured Query Language),
que uma linguagem padro voltada para trabalhar com BD. Antes de
comearmos 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 Manipulao de Dados ou Data
Manipulation Language DML) e LDD (Linguagem de Definio de Dados ou
Data Definition Language DDL) . A LDD um conjunto de comandos dentro
da SQL usada para a definio das estruturas de dados, fornecendo as
instrues que permitem a criao, modificao e remoo das tabelas, assim
como criao de ndices. J a LMD o grupo de comandos dentro da
linguagem SQL utilizado para a recuperao, incluso, remoo e modificao
de informaes em bancos de dados.

Vamos conhecer agora alguns comandos bsicos muito utilizados da
linguagem SQL.
A

7



1.1.1) O comando CREATE TABLE

Esse comando serve para criar tabelas em banco de dados. Veja a sua sintaxe
abaixo:


create table <t abel a>( <campo1> <t i po> [ <const r ai nt s>] [ , <campo2>
<t i po> [ <const r ai nt s>] , . . . , <campon> <t i po> [ <const r ai nt s> ] ] )


Exemplo: Criar uma tabela chamada cadastro com os seguintes campos:

- codusuario: Do tipo inteiro e com propriedades de chave primria e auto
numerao.

- nome : Do tipo texto e requerido

- idade : Do tipo inteiro e requerido


create table cadast r o( codusuar i o i nt eger pr i mar y key aut oi ncr ement ,
nome t ext not nul l , i dade i nt eger not nul l )


Outro exemplo : Criar uma tabela chamada cadastro (com os mesmos
campos do exemplo acima) no banco de dados, se ela no existir.

create table if not exists cadast r o( codusuar i o i nt eger pr i mar y key
aut oi ncr ement , nome t ext not nul l , i dade i nt eger not nul l )

1.1.2) O comando INSERT

Esse comando serve para inserir dados em uma tabela j existente. Veja a sua
sintaxe abaixo:

insert into <t abel a>( <campo1>, . . . <campon>)
values( <val or 1>, . . . , <val or n>)


Exemplo: Adicionar dados na tabela cadastro (que foi criada com o comando
CREATE TABLE), conforme mostrado abaixo:

nome : Luciano
idade : 23




8



OBS: Como o campo codusuario do tipo auto-numerao, o valor dele j
definido automaticamente.

insert into cadast r o( nome, i dade)
values( Luci ano , 23)

1.1.3) O comando UPDATE

Esse comando serve para atualizar dados de uma tabela j existente. Veja a
sua sintaxe abaixo:

update <t abel a> set <campo1> = <val or 1>[ , . . . , <campon> = <val or n>]
where <condi o>


Exemplo: Atualizar a idade do primeiro registro (Luciano) para 27 anos.

update cadast r o set i dade = 27
where codusuar i o=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 <t abel a> where <condi o>


Exemplo: Remover o primeiro registro da tabela (Luciano)


delete from cadast r o where codusuar i o=1


1.1.5) O comando SELECT

Esse comando serve para fazer consultas em uma tabela j existente. Veja a
sua sintaxe abaixo:

select <campo1>[ , <campo2>, . . . , <campon>]
from <t abel a>
where <condi o>

Exemplos :

Mostrar todos os dados cadastrados na tabela


9




select codusuar i o, nome, i dade
from cadast r o

Mostrar todos os nomes cuja idade seja maior que 25.

select nome
from cadast r o
where ( i dade >= 25)


Mostrar todos os nomes cujo prefixo seja David, ou melhor, todos que se
chamam David independente do sobrenome.

select nome
from cadast r o
where ( nome like Davi d% )


A partir de agora vamos ver abaixo algumas funes 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 mtodos, conforme
mostrado em seguida:

1.2.1) O mtodo query

O mtodo query realiza uma consulta SQL no banco de dados (equivale ao
comando SELECT). Essa funo retorna uma instncia (objeto) do tipo Cursor.
Vejamos a sintaxe do mtodo em seguida:

Cur sor quer y( St r i ng <t abel a>, St r i ng[ ] <col unas>, St r i ng
<condi cao_de_busca>, St r i ng[ ] <sel eci onAr gs>, St r i ng <gr oupby>, St r i ng
<havi ng>, St r i ng <or der by>)

Vamos conhecer os parmetros que iremos utilizar dessa funo:

<tabela>: Neste parmetro voc informa o nome da tabela.

<coluna>: Neste parmetro a(s) coluna(s) que o banco possui.

<condio de busca>: Aqui voc informa a condio de busca de dados. Este
parmetro funciona como se fosse a clausula where do SQL, onde informada
a condio de busca.

O restante dos parmetros iremos trabalhar em seu valor null.

10



1.2.2) O mtodo insert

O mtodo insert realiza uma insero de dados na tabela (equivale ao
comando INSERT). Vejamos a sintaxe deste mtodo:

l ong i nser t ( St r i ng <t abel a>, St r i ng <nul l Col umnHack>, Cont ent Val ues
<val ues>)

Essa funo possui trs parmetros:

<tabela>: Neste parmetro voc informa o nome da tabela.

<nullColumnHack>: O SQL no permite a insero de linhas em branco, logo,
se o valor de uma coluna for vazio, ele ser iniciado com o valor null.

<values>: Este parmetro possui os valores a serem adicionados na tabela.

1.2.3) O mtodo update


O mtodo update realiza uma atualizao de dados na tabela (equivale ao
comando UPDATE). Vejamos agora a sintaxe deste mtodo :

i nt updat e( St r i ng <t abel a>, Cont ent Val ues <val ues>, St r i ng <condi o>,
St r i ng <ar gument os_condi cao>)


Essa funo possui trs parmetros:

<tabela>: Neste parmetro voc informa o nome da tabela.

<values>: Este parmetro possui os valores a serem adicionados na tabela.

<condio>: Aqui voc informa a condio para a realizao da atualizao dos
dados.

<argumentos_condicao>: Aqui voc informa os argumentos relativos
condio informada.


1.2.4) O mtodo delete

O mtodo delete realiza a remoo de dados na tabela (equivale ao comando
DELETE). Vejamos a sintaxe deste mtodo:

i nt del et e( St r i ng <t abel a>, St r i ng <condi o>, St r i ng
<ar gument os_condi cao>)

Essa funo possui trs parmetros:

11




<tabela>: Neste parmetro voc informa o nome da tabela.

<condio>: Aqui voc informa a condio para a realizao da remoo dos
dados da tabela.

<argumentos_condicao>: Aqui voc informa os argumentos relativos
condio informada.


1.2.5) O mtodo execSQL

O mtodo execSQL executa uma consulta SQL (como CREATE TABLE,
INSERT INTO, UPDATE, DELETE e etc.). No possvel usar a clausula
SELECT nesta funo. Para esse tipo de situao, use o mtodo query.
Vejamos a sintaxe deste mtodo:

voi d execSQL( St r i ng sql )

Vamos fazer algumas comparaes da funo execSQL, que permite
sintaxes de comando SQL com as demais funes, como update,insert e
delete para a realizao de uma consulta SQL.


1.3) Exemplos de SQL usando as funes do Android


1.3.1) Fazendo uma consulta a tabela (usando SELECT)

- Comando SQL :

select codusuar i o, nome, i dade
from cadast r o


- Usando a funo query :

quer y( cadast r o, ( new St r i ng[ ]
{codusuar i o, nome, i dade}) , null, null, null,
null, null) ;


- Comando SQL :

select nome
from cadast r o
where i dade > 24




12



- Usando a funo query :

quer y( cadast r o, ( new St r i ng[ ] {nome}) , i dade > 24
, null, null, null, null) ;


1.3.2) Inserindo dados (usando INSERT)


- Comando SQL :

insert into cadast r o( nome, i dade)
values( Luci ano , 23)


- Usando a funo execSQL

execSQL( i nser t i nt o cadast r o( nome, i dade) val ues( Luci ano , 23) ; ) ;

Usando a funo insert :

Cont ent Val ues val or = new Cont ent Val ues( ) ;

val or . put ( nome, Luci ano ) ;
val or . put ( i dade, 23) ;

i nser t ( cadast r o, null, val or ) ;



1.3.3) Atualizando dados (usando UPDATE)


- Comando SQL :

update cadast r o set i dade = 27
where codusuar i o=1


- Usando a funo execSQL

execSQL( updat e cadast r o set i dade = 27 wher e ( codusuar i o=1) ; ) ;


Usando a funo update :

Cont ent Val ues val or = new Cont ent Val ues( ) ;

val or . put ( i dade, 27) ;

updat e( cadast r o, val or , codusuar i o=1) ;

13




1.3.4) Removendo dados (usando DELETE)


- Comando SQL :

delete from cadast r o where codusuar i o=1


- Usando a funo execSQL

execSQL( del et e f r om cadast r o wher e ( codusuar i o=1) ; ) ;


Usando a funo delete :

del et e( cadast r o, codusuar i o=1, null) ;


1.3.5) Criando uma tabela (usando CREATE TABLE)

- Comando SQL :

create table cadast r o( codusuar i o i nt eger pr i mar y key aut oi ncr ement ,
nome t ext not nul l , i dade i nt eger not nul l )

- Usando a funo execSQL

execSQL( cr eat e t abl e cadast r o( codusuar i o i nt eger pr i mar y key
aut oi ncr ement , nome t ext not nul l , i dade i nt eger not nul l ) ; ) ;


Agora vamos conhecer as funes responsveis por criar e abrir banco de
dados no Android.


SQLDat abase openOr Cr eat eDat abase( St r i ng nome_do_banco, i nt mode,
Cur sor Fact or y cf ) ;

Essa funo 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 parmetro, que normalmente null. Veja um exemplo abaixo:


SQLDat abase db;

db = openOr Cr eat eDat abase( " dbbanco" , Cont ext . MODE_PRIVATE, null) ;


O comando acima abre ou cria o banco de dados chamado dbbanco.


14



Quando realizamos uma consulta do tipo SELECT usando a funo query, ela
retorna um objeto do tipo Cursor, onde nela esto armazenados os registros
solicitados pela consulta. Vamos ver abaixo os mtodos da classe Cursor:



Mtodo Descrio

bool ean moveToFi r st ( )
Move o cursor para o primeiro registro
da tabela.


bool ean moveToPr evi ous( )
Move o cursor para o registro anterior
da tabela.


bool ean moveToNext ( )
Move o cursor para o prximo registro
da tabela.


bool ean moveToLast ( )
Move o cursor para o ltimo registro
da tabela.

i nt get Count ( ) Retorna o nmero de registros da
tabela.
i nt get Col umnI ndex( St r i ng col umnName) Retorna o ndice da coluna na tabela,
atravs do seu nome, que passado
como parmetro.

St r i ng get Col umnName( i nt col umnI ndex)
Retorna o nome da coluna na tabela,
atravs do seu ndice, que passado
como parmetro.


i nt get I nt ( i nt col umnI ndex)
Retorna o valor do campo, tendo
como seu parmetro o seu ndice,
convertido em int. Lembre-se : o
ndice do primeiro campo 0, o ndice
do segundo campo 1 e assim por
diante.


f l oat get Fl oat ( i nt col umnI ndex)
Retorna o valor do campo, tendo
como seu parmetro o seu ndice,
convertido em float. Lembre-se : o
ndice do primeiro campo 0, o ndice
do segundo campo 1 e assim por
diante.


doubl e get Doubl e( i nt col umnI ndex)
Retorna o valor do campo, tendo
como seu parmetro o seu ndice,
convertido em double. Lembre-se : o
ndice do primeiro campo 0, o ndice
do segundo campo 1 e assim por
diante.



shor t get Shor t ( i nt col umnI ndex)
Retorna o valor do campo, tendo
como seu parmetro o seu ndice,
convertido em short. Lembre-se : o
ndice do primeiro campo 0, o ndice
do segundo campo 1 e assim por
diante.





15




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 idade
Amanda 32
Bianca 30
Bruna 23
Carla 20


Agora, observe a linha de cdigo abaixo:

SQLDat abase db;

db = openOr Cr eat eDat abase( " dbbanco" ,
Cont ext . MODE_PRIVATE, null) ;

Cur sor c = db. quer y( " cadast r o" , ( new St r i ng[ ] {" nome" , " i dade" }) ,
" i dade < 32" , null, null, null, null) ;

Observe que a linha acima cria um objeto do tipo Cursor que vai receber o
resultado da consulta da funo query, que retorna uma instncia do mesmo
tipo. Logo, a instncia retornada pela funo query na verdade, retorna uma
tabela resultante da consulta. Veja esse resultado abaixo:

nome idade
Bruna 23
Carla 20


Continuando a codificao. Veja a linha abaixo:

c. moveToFi r st ( ) ;

A linha acima coloca o ponteiro no primeiro registro da tabela. A linha:

St r i ng nome = c. get St r i ng( 0) ;

Retorna o valor do campo nome do primeiro registro, no caso, Bruna. Veja
agora a prxima linha:

i nt i dade = c. get I nt ( 1) ;

Retorna o valor do campo idade do primeiro registro, no formato int. Neste
caso, o valor retornado 23. A linha:

c. moveToNext ( ) ;


16



A linha acima avana para o prximo registro. A linha:

nome = c. get St r i ng( 0) ;

Retorna o valor do campo nome do segundo registro, no caso, Carla. Veja
agora a prxima linha:

i nt i dade = c. get I nt ( 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 manipulao
de banco de dados no Android. Agora vamos por esse aprendizado na prtica.


1.4) Desenvol vendo uma aplicao usando banco de dados

Com o que j aprendemos neste captulo (e tambm ns captulos e tpicos
anteriores) j podemos desenvolver uma aplicao mais interessante. Para
tornar o aprendizado mais interessante vamos criar uma aplicao de cadastro
de pessoas. Nessa aplicao o usurio vai informar os seguintes dados :
nome, profisso e idade.

Essa aplicao vai possuir trs telas, cada uma com as seguintes
funcionalidades:

Tela principal (tela com opes): Nessa tela da aplicao teremos um menu
que dar acesso ao cadastro do usurio e a visualizao dos usurios
cadastrados.

Tela de cadastro: Nesse tela o usurio ir preencher os campos solicitados
pela aplicao e em seguida o mesmo poder cadastrar para que as
informaes sejam registradas.

Tela de visualizao de dados: Nessa tela podero ser visualizados os
dados (usurios) cadastrados. Se nada foi cadastrado na aplicao, ser
exibida uma mensagem informando essa situao.

Nessa aplicao para armazenar os dados eu fao uso de uma estrutura de
dados do tipo lista (duplamente encadeada). Nessa estrutura os dados so
armazenados em sequncia, e acessados tanto sequencialmente e na sua
ordem inversa de cadastro (avanando e retrocedendo pelos registros).


Bom, vamos construir a nossa aplicao. Crie um novo projeto com os
seguintes dados abaixo:


17



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 : Aplicao de Cadastro (BD)

Dentro da pasta res/drawable-mdpi coloque uma figura que represente o
cone da nossa aplicao. Para esta aplicao utilizei uma imagem de
extenso PNG chamada profile.png.

Altere a estrutura de layout da sua aplicao para o LinearLayout e em
APAGUE o componente TextView. Feito isso adicione os seguintes
componentes na sequncia:

ImageView

Propriedade Valor
Src (imagem) profile.png

TextView

Propriedade Valor


Text
Bem vindo a Aplicao de Cadastro
de Pessoas.Este um pequeno
programa de demonstrao de
cadastro.Selecione uma das opes
abaixo:

Button

Propriedade Valor
Id btcadastrarpessoas
Width fill_parent
Text Cadastrar pessoa





18



Button

Propriedade Valor
Id btlistarpessoas
Width fill_parent
Text Listar pessoas cadastradas

Seguindo os passos acima, a aplicao deve estar de acordo com a figura
seguinte:

Layout da tela principal da aplicao

Vejamos agora a estutura XML da tela principal da nossa aplicao:

<Li near Layout
xml ns: andr oi d="http://schemas.android.com/apk/res/android"
xml ns: t ool s="http://schemas.android.com/tools"
andr oi d: i d="@+id/LinearLayout1"
andr oi d: l ayout _wi dt h="match_parent"
andr oi d: l ayout _hei ght ="match_parent"
andr oi d: or i ent at i on="vertical" >

<I mageVi ew
andr oi d: i d="@+id/imageView1"
andr oi d: l ayout _wi dt h="wrap_content"
andr oi d: l ayout _hei ght ="wrap_content"
andr oi d: sr c="@drawable/profile" / >

<Text Vi ew
andr oi d: i d="@+id/textView1"
andr oi d: l ayout _wi dt h="wrap_content"
andr oi d: l ayout _hei ght ="wrap_content"
andr oi d: t ext ="Bem vindo a Aplicao
de Cadastro de Pessoas.Este um pequeno
programa de demonstrao de cadastro.
Selecione uma das opes abaixo:" / >


19




<But t on
andr oi d: i d="@+id/btcadastrarpessoa"
andr oi d: l ayout _wi dt h="fill_parent"
andr oi d: l ayout _hei ght ="wrap_content"
andr oi d: t ext ="Cadastrar pessoa" / >

<But t on
andr oi d: i d="@+id/btlistarpessoas"
andr oi d: l ayout _wi dt h="fill_parent"
andr oi d: l ayout _hei ght ="wrap_content"
andr oi d: t ext ="Listar pessoas cadastradas" / >

</ Li near Layout >

Agora vamos criar mais uma tela (arquivo de layout XML) para nossa
aplicao. Para isso vamos clicar com o boto direito sobre a pasta layout e
em seguida vamos chamar o recurso de criao 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
sequncia:

ImageView

Propriedade Valor
Src (Imagem) profile

TextView

Propriedade Valor
Text Mdulo de cadastro.Digite seus dados
abaixo:

TextView

Propriedade Valor
Text Nome:


EditText (Plain Text)

Propriedade Valor
Id ednome
Text (Deixar em branco)




20



TextView

Propriedade Valor
Text Profisso:

EditText (Plain Text)

Propriedade Valor
Id edprofissao
Width fill_parent
Text (Deixar em branco)


TextView

Propriedade Valor
Text Idade:

EditText (Plain Text)

Propriedade Valor
Id edidade
Width fill_parent
Text (Deixar em branco)


Seguindo os passos acima, a aplicao deve estar de acordo com a figura
seguinte:


Layout da tela de cadastro

Bom, ainda no acabou. Agora vamos adicionar uma estrutura LinearLayout
(Horizontal) que ser responsvel por organizar os botes de forma horizontal

21



logo aps a EditText que representa o campo idade. Aps adicionar essa
estrutura, modifique a seguintes propriedades dela, conforme abaixo:

Propriedade Valor
Gravity 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 vo
estar dispostos de forma horizontal (um ao lado do outro) e todos esses
componentes estaro 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 Valor
Id btcadastrar
Text Cadastrar pessoa



Button

Propriedade Valor
Id btcancelar
Text Cancelar



Seguindo os passos acima, o Layout de nossa aplicao deve estar de acordo
com a figura abaixo:















22





Layout da tela de cadastro

Vamos ver agora a estrutura XML da tela de cadastro da aplicao:


<?xml ver si on="1.0" encodi ng="utf-8"?>
<Li near Layout
xml ns: andr oi d="http://schemas.android.com/apk/res/android"
andr oi d: l ayout _wi dt h="match_parent"
andr oi d: l ayout _hei ght ="match_parent"
andr oi d: or i ent at i on="vertical" >

<I mageVi ew
andr oi d: i d="@+id/imageView1"
andr oi d: l ayout _wi dt h="wrap_content"
andr oi d: l ayout _hei ght ="wrap_content"
andr oi d: sr c="@drawable/profile" / >


<Text Vi ew
andr oi d: i d="@+id/textView1"
andr oi d: l ayout _wi dt h="wrap_content"
andr oi d: l ayout _hei ght ="wrap_content"
andr oi d: t ext ="Mdulo de cadastro.
Digite seus dados abaixo:" / >


<Text Vi ew
andr oi d: i d="@+id/textView2"
andr oi d: l ayout _wi dt h="wrap_content"
andr oi d: l ayout _hei ght ="wrap_content"
andr oi d: t ext ="Nome:" / >


<Edi t Text
andr oi d: i d="@+id/ednome"
andr oi d: l ayout _wi dt h="match_parent"

23




andr oi d: l ayout _hei ght ="wrap_content" >

<r equest Focus / >
</ Edi t Text >


<Text Vi ew
andr oi d: i d="@+id/textView3"
andr oi d: l ayout _wi dt h="wrap_content"
andr oi d: l ayout _hei ght ="wrap_content"
andr oi d: t ext ="Profisso:" / >


<Edi t Text
andr oi d: i d="@+id/edprofissao"
andr oi d: l ayout _wi dt h="match_parent"
andr oi d: l ayout _hei ght ="wrap_content" / >


<Text Vi ew
andr oi d: i d="@+id/textView4"
andr oi d: l ayout _wi dt h="wrap_content"
andr oi d: l ayout _hei ght ="wrap_content"
andr oi d: t ext ="Idade:" / >


<Edi t Text
andr oi d: i d="@+id/edidade"
andr oi d: l ayout _wi dt h="match_parent"
andr oi d: l ayout _hei ght ="wrap_content" / >

<Li near Layout
andr oi d: l ayout _wi dt h="match_parent"
andr oi d: l ayout _hei ght ="wrap_content"
andr oi d: gr avi t y="center" >


<But t on
andr oi d: i d="@+id/btcadastrar"
andr oi d: l ayout _wi dt h="wrap_content"
andr oi d: l ayout _hei ght ="wrap_content"
andr oi d: t ext ="Cadastrar" / >



<But t on
andr oi d: i d="@+id/btcancelar"
andr oi d: l ayout _wi dt h="wrap_content"
andr oi d: l ayout _hei ght ="wrap_content"
andr oi d: t ext ="Cancelar" / >

</ Li near Layout >

</ Li near Layout >

Agora vamos criar mais uma tela (arquivo de layout XML) para nossa
aplicao. O nome da nossa tela vai se chamar lista_pessoas_cadastradas.

24


Aps criar a tela da nossa aplicao, vamos adicionar os seguintes
componentes na sequncia:


ImageView

Propriedade Valor
Src (Imagem) profile.png

TextView

Propriedade Valor
Text Lista de pessoas
cadastradas.
Text size 20sp

Seguindo os passos acima, o layout da aplicao deve estar de acordo com a
figura seguinte:


Layout da tela de listagem de cadastrados

Ainda no acabou. Vamos adicionar aps o texto uma nova estrutura de layout
do tipo LinearLayout (Horizontal), e em seguida vamos mudar as seguintes
propriedades dela, conforme abaixo:

LinearLayout

Propriedade Valor
Id layoutNome


Agora dentro da estrutura layoutNome vamos adicionar os seguintes
componentes na sequncia:


25



TextView

Propriedade Valor
Text Nome.
Text color #0000ff
Text size 20sp

TextView

Propriedade Valor
Text (Deixar em branco com
espaos)
Text size 20sp
Id txtnome

Logo aps a estrutura LinearLayout que chamamos de layoutNome, vamos
adicionar uma nova estrutura LinearLayout (Horizontal), e em seguida
modifique as seguintes propriedades abaixo:

Propriedade Valor
Id layoutProfissao

Agora dentro da estrutura layoutProfissao vamos adicionar os seguintes
componentes na sequncia:

TextView

Propriedade Valor
Text Profisso.
Text color #0000ff
Text size 20sp

TextView

Propriedade Valor
Text (Deixar em branco com
espaos)
Text size 20sp
Id txtprofissao

Agora vamos adicionar uma nova estrutura LinearLayout (Horizontal) e em
seguida modifique as seguintes propriedades abaixo:

Propriedade Valor
Id layoutIdade



26


Agora dentro da estrutura layoutIdade vamos adicionar os seguintes
componentes na sequncia:

TextView

Propriedade Valor
Text Idade.
Text color #0000ff
Text size 20sp

TextView

Propriedade Valor
Text (Deixar em branco com espaos)
Text color #ffffff
Text size 20sp
Id txtidade

Agora vamos adicionar uma nova estrutura LinearLayout (Horizontal), como j
foi mostrado acima. E depois, modifique as seguintes propriedades abaixo:

Propriedade Valor
Id layoutBotoes
Gravity Center

Agora dentro da estrutura layoutBotoes vamos adicionar os seguintes
componentes na sequncia:

Button

Propriedade Valor
Id btvoltar
Text Voltar

Button

Propriedade Valor
Id @+lista/btavancar
Text Avanar

Agora vamos adicionar um Button logo aps a estrutura layoutBotoes que
criamos com as seguintes propriedades abaixo:

Button

Propriedade Valor
Id btmenu_principal
Text Menu principal
Width fill_parent

27



Seguindo todos os passos acima, o layout da aplicao 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:

<?xml ver si on="1.0" encodi ng="utf-8"?>
<Li near Layout
xml ns: andr oi d="http://schemas.android.com/apk/res/android"
andr oi d: l ayout _wi dt h="match_parent"
andr oi d: l ayout _hei ght ="match_parent"
andr oi d: or i ent at i on="vertical" >

<I mageVi ew
andr oi d: i d="@+id/imageView1"
andr oi d: l ayout _wi dt h="wrap_content"
andr oi d: l ayout _hei ght ="wrap_content"
andr oi d: sr c="@drawable/profile" / >


<Text Vi ew
andr oi d: i d="@+id/textView1"
andr oi d: l ayout _wi dt h="wrap_content"
andr oi d: l ayout _hei ght ="wrap_content"
andr oi d: t ext ="Lista de pessoas cadastradas"
andr oi d: t ext Si ze="20sp" / >

<Li near Layout
andr oi d: i d="@+id/layoutNome"
andr oi d: l ayout _wi dt h="match_parent"
andr oi d: l ayout _hei ght ="wrap_content"
andr oi d: or i ent at i on="horizontal" >
<Text Vi ew
andr oi d: i d="@+id/textView2"
andr oi d: l ayout _wi dt h="wrap_content"
andr oi d: l ayout _hei ght ="wrap_content"
andr oi d: t ext ="Nome :"
andr oi d: t ext Col or ="#0000ff"
andr oi d: t ext Si ze="20sp" / >

28



<Text Vi ew
andr oi d: i d="@+id/txtnome"
andr oi d: l ayout _wi dt h="wrap_content"
andr oi d: l ayout _hei ght ="wrap_content"
andr oi d: t ext =" "
andr oi d: t ext Si ze="20sp" / >

</ Li near Layout >

<Li near Layout
andr oi d: i d="@+id/layoutProfissao"
andr oi d: l ayout _wi dt h="match_parent"
andr oi d: l ayout _hei ght ="wrap_content" >
<Text Vi ew
andr oi d: i d="@+id/textView3"
andr oi d: l ayout _wi dt h="wrap_content"
andr oi d: l ayout _hei ght ="wrap_content"
andr oi d: t ext ="Profisso:"
andr oi d: t ext Col or ="#0000ff"
andr oi d: t ext Si ze="20sp" / >

<Text Vi ew
andr oi d: i d="@+id/txtprofissao"
andr oi d: l ayout _wi dt h="wrap_content"
andr oi d: l ayout _hei ght ="wrap_content"
andr oi d: t ext =" "
andr oi d: t ext Si ze="20sp" / >

</ Li near Layout >

<Li near Layout
andr oi d: i d="@+id/layoutIdade"
andr oi d: l ayout _wi dt h="match_parent"
andr oi d: l ayout _hei ght ="wrap_content" >


<Text Vi ew
andr oi d: i d="@+id/textView4"
andr oi d: l ayout _wi dt h="wrap_content"
andr oi d: l ayout _hei ght ="wrap_content"
andr oi d: t ext ="Idade:"
andr oi d: t ext Col or ="#0000ff"
andr oi d: t ext Si ze="20sp" / >

<Text Vi ew
andr oi d: i d="@+id/txtidade"
andr oi d: l ayout _wi dt h="wrap_content"
andr oi d: l ayout _hei ght ="wrap_content"
andr oi d: t ext =" "
andr oi d: t ext Si ze="20sp" / >

</ Li near Layout >

<Li near Layout
andr oi d: i d="@+id/layoutBotoes"
andr oi d: l ayout _wi dt h="match_parent"
andr oi d: l ayout _hei ght ="wrap_content"
andr oi d: gr avi t y="center" >


29




<But t on
andr oi d: i d="@+id/btvoltar"
andr oi d: l ayout _wi dt h="wrap_content"
andr oi d: l ayout _hei ght ="wrap_content"
andr oi d: t ext ="Voltar" / >

<But t on
andr oi d: i d="@+id/btavancar"
andr oi d: l ayout _wi dt h="wrap_content"
andr oi d: l ayout _hei ght ="wrap_content"
andr oi d: t ext ="Avanar" / >

</ Li near Layout >


<But t on
andr oi d: i d="@+id/btmenu_principal"
andr oi d: l ayout _wi dt h="fill_parent"
andr oi d: l ayout _hei ght ="wrap_content"
andr oi d: t ext ="Menu principal" / >

</ Li near Layout >

No arquivo AplicacaoCadastroActivity.java, vamos adicionar o seguinte cdigo
abaixo:

package com. exampl e. apl i cacaodecadast r obd;

import andr oi d. os. Bundl e;
import andr oi d. app. Act i vi t y;
import andr oi d. app. Al er t Di al og;
import andr oi d. cont ent . Cont ext ;
import andr oi d. dat abase. Cur sor ;
import andr oi d. dat abase. sql i t e. SQLi t eDat abase;
import andr oi d. vi ew. Vi ew;
import andr oi d. wi dget . But t on;
import andr oi d. wi dget . Edi t Text ;
import andr oi d. wi dget . Text Vi ew;


public class Apl i cacaoCadast r oAct i vi t y extends Act i vi t y {

But t on bt cadast ar pessoa, bt l i st ar pessoas;

But t on bt cadast r ar , bt cancel ar ;

But t on bt vol t ar , bt avancar , bt menu_pr i nci pal ;

Text Vi ew t xt nome, t xt pr of i ssao, t xt i dade;

Edi t Text ednome, edpr of i ssao, edi dade;

SQLi t eDat abase db;

Cur sor dados;

int numer o_r egi st r os = 0;


30



int posi cao;

@Over r i de
public void onCr eat e( Bundl e savedI nst anceSt at e) {

super. onCr eat e( savedI nst anceSt at e) ;

try {

db = openOr Cr eat eDat abase( " banco_dados" ,
Cont ext . MODE_PRIVATE, null) ;

db. execSQL( " cr eat e t abl e i f not exi st s cadusuar i os
( codusuar i o i nt eger pr i mar y key aut oi ncr ement , nome
t ext not nul l , pr of i ssao t ext not nul l , i dade i nt eger
not nul l ) " ) ;


} catch( Except i on e) {

Exi bi r Mensagem( e. t oSt r i ng( ) ) ;
}

Car r egar Tel aPr i nci pal ( ) ;
}

public void Car r egar Tel aPr i nci pal ( )
{
set Cont ent Vi ew( R. l ayout .
activity_aplicacao_cadastro) ;

bt cadast ar pessoa = ( But t on) f i ndVi ewByI d
( R. i d. btcadastrarpessoa) ;
bt l i st ar pessoas = ( But t on) f i ndVi ewByI d
( R. i d. btlistarpessoas) ;

bt cadast ar pessoa. set OnCl i ckLi st ener ( new
Vi ew. OnCl i ckLi st ener ( ) {

@Over r i de
public void onCl i ck( Vi ew ar g0) {

Car r egar Tel aCadast r o( ) ;

}
}) ;

bt l i st ar pessoas. set OnCl i ckLi st ener ( new Vi ew. OnCl i ckLi st ener ( ) {

@Over r i de
public void onCl i ck( Vi ew ar g0) {

Car r egar Tel aLi st agemPessoas( ) ;

}
}) ;

}


31



public void Car r egar Tel aCadast r o( )
{


set Cont ent Vi ew( R. l ayout . cadastro) ;
ednome = ( Edi t Text ) f i ndVi ewByI d( R. i d. ednome) ;
edpr of i ssao = ( Edi t Text ) f i ndVi ewByI d
( R. i d. edprofissao) ;
edi dade = ( Edi t Text ) f i ndVi ewByI d( R. i d. edidade) ;

bt cadast r ar = ( But t on) f i ndVi ewByI d
( R. i d. btcadastrar) ;

bt cancel ar = ( But t on) f i ndVi ewByI d
( R. i d. btcancelar) ;

dados = db. quer y( " cadusuar i os" , ( new St r i ng[ ]
{" nome" , " pr of i ssao" , " i dade" }) , null, null,
null, null, null) ;

numer o_r egi st r os = dados. get Count ( ) ;

bt cadast r ar . set OnCl i ckLi st ener ( new Vi ew.
OnCl i ckLi st ener ( ) {

@Over r i de
public void onCl i ck( Vi ew ar g0) {

try {

St r i ng nome = ednome. get Text ( ) . t oSt r i ng( ) ;

St r i ng pr of i ssao = edpr of i ssao.
get Text ( ) . t oSt r i ng( ) ;

St r i ng i dade = edi dade. get Text ( ) .
t oSt r i ng( ) ;

numer o_r egi st r os++;

db. execSQL( " i nser t i nt o cadusuar i os
val ues( " + St r i ng. valueOf
( numer o_r egi st r os)
+" , ' " + nome + " ' , ' " + pr of i ssao + " ' , "
+ i dade + " ) " ) ;

Exi bi r Mensagem( " Regi st r o cadast r ado com
sucesso" ) ;


} catch( Except i on e)
{
Exi bi r Mensagem( " Er r o ao cadast r ar " ) ;
}

Car r egar Tel aPr i nci pal ( ) ;

}
}) ;

32



bt cancel ar . set OnCl i ckLi st ener ( new Vi ew.
OnCl i ckLi st ener ( ) {

@Over r i de
public void onCl i ck( Vi ew ar g0) {
Car r egar Tel aPr i nci pal ( ) ;

}
}) ;

}

public void Car r egar Tel aLi st agemPessoas( )
{
try {

dados = db. quer y( " cadusuar i os" , ( new St r i ng[ ]
{" nome" , " pr of i ssao" , " i dade" }) , null, null,
null, null, null) ;
numer o_r egi st r os = dados. get Count ( ) ;
posi cao = 1;

}catch( Except i on e) {

Exi bi r Mensagem( " Er r o ao obt er dados do
banco" ) ;
Car r egar Tel aPr i nci pal ( ) ;
return;
}

if( numer o_r egi st r os == 0)
{
Exi bi r Mensagem( " Nenhumr egi st r o
cadast r ado" ) ;
Car r egar Tel aPr i nci pal ( ) ;
return;
}

else {


set Cont ent Vi ew( R. l ayout . lista_pessoas_cadastradas) ;

bt vol t ar = ( But t on) f i ndVi ewByI d( R. i d. btvoltar) ;
bt avancar = ( But t on) f i ndVi ewByI d( R. i d. btavancar) ;
bt menu_pr i nci pal = ( But t on) f i ndVi ewByI d
( R. i d. btmenu_principal) ;

t xt nome = ( Text Vi ew) f i ndVi ewByI d( R. i d. txtnome) ;
t xt pr of i ssao = ( Text Vi ew) f i ndVi ewByI d
( R. i d. txtprofissao) ;
t xt i dade = ( Text Vi ew) f i ndVi ewByI d( R. i d. txtidade) ;

dados. moveToFi r st ( ) ;

t xt nome. set Text ( dados. get St r i ng
( dados. get Col umnI ndex( " nome" ) ) ) ;



33



t xt i dade. set Text ( dados. get St r i ng
( dados. get Col umnI ndex( " i dade" ) ) ) ;

t xt pr of i ssao. set Text ( dados. get St r i ng
( dados. get Col umnI ndex( " pr of i ssao" ) ) ) ;

bt vol t ar . set OnCl i ckLi st ener ( new Vi ew.
OnCl i ckLi st ener ( ) {

@Over r i de
public void onCl i ck( Vi ew ar g0) {

if( posi cao == 1)
return;

posi cao- - ;

dados. moveToPr evi ous( ) ;
t xt nome. set Text ( dados. get St r i ng
( dados. get Col umnI ndex( " nome" ) ) ) ;
t xt i dade. set Text ( dados. get St r i ng
( dados. get Col umnI ndex( " i dade" ) ) ) ;

t xt pr of i ssao. set Text ( dados. get St r i ng
( dados. get Col umnI ndex( " pr of i ssao" ) ) ) ;


}
}) ;


bt avancar . set OnCl i ckLi st ener ( new Vi ew.
OnCl i ckLi st ener ( ) {

@Over r i de
public void onCl i ck( Vi ew ar g0) {

if( posi cao == numer o_r egi st r os)
return;

posi cao++;

dados. moveToNext ( ) ;

t xt nome. set Text ( dados. get St r i ng
( dados. get Col umnI ndex( " nome" ) ) ) ;
t xt i dade. set Text ( dados. get St r i ng
( dados. get Col umnI ndex( " i dade" ) ) ) ;

t xt pr of i ssao. set Text ( dados. get St r i ng
( dados. get Col umnI ndex( " pr of i ssao" ) ) ) ;


}
}) ;

bt menu_pr i nci pal . set OnCl i ckLi st ener ( new Vi ew.
OnCl i ckLi st ener ( ) {


34



@Over r i de
public void onCl i ck( Vi ew v) {
Car r egar Tel aPr i nci pal ( ) ;
}
}) ;


}

}

public void Exi bi r Mensagem( St r i ng mensagem) {

Al er t Di al og. Bui l der di al ogo = new Al er t Di al og.
Bui l der ( Apl i cacaoCadast r oAct i vi t y. this) ;
di al ogo. set Ti t l e( " Avi so" ) ;
di al ogo. set Message( mensagem) ;
di al ogo. set Neut r al But t on( " OK" , null) ;
di al ogo. show( ) ;
}

}

Aps digitarmos os comandos da classe acima, execute a aplicao acima. O
resultado voc confere na imagem seguinte:



Aplicao em execuo Tela de cadastro




35




Concluso a respeito do
material



Nesta apostila aprendemos a desenvolver aplicaes em Android voltadas para
Banco de Dados. Neste material aprendemos o que vem a ser a linguagem
SQL e suas principais caractersticas, aprendemos os comandos bsicos da
linguagem (para a realizao de consultas, atualizaes de dados e etc.) e
tambm como utiliz-las para a construo de aplicaes voltadas para esse
propsito, atravs do pacote oferecido pelo Android para o gerenciamento de
Banco de Dados. No final, desenvolvemos uma aplicao que faz uso do
Banco de Dados para o armazenamento de gerenciamento de dados pessoais.


Espero que esse material lhe tenha sido til.




Abraos