Escolar Documentos
Profissional Documentos
Cultura Documentos
Neste artigo irei ensinar como fazer um cadastro de pessoa para android salvando em banco de dados SQLCompact, estarei utilizando o eclipse para criar o aplicativo.
11
Object 1
Object 2
Gostei (5) (0) Vamos l, Crie um projeto android com o nome que desejar, no meu caso vou dar o nome de cadPessoa.
Feito isso, vamos criar as se uintes classes !"uscarPessoa!, !CadastroPessoa!, !Pessoa!, !Pessoa#ist$dapter!, !%ditarPessoa!, !&epositorioPessoa!, !&epositorioPessoa'cript!, !'(#ite)elper!, delete a class $ctivit* que sera criada so+in,a. devera -icar da se uinte maneira .
$ ora vamos con-i ura nossa aplica/0o para ser reprodu+ida na tela, ac,e o !$ndroid1ani-est.2ml!, preste muita aten/0o nessa parte. de um duplo clic3 nele, selecione a a4a a4ai2o escrito !$pplication!, remove a classe $ctivit* que -oi criada, so+in,a, deverar -icar da se uinte maneira.
<uses-sd! android:min&d!'ersion="8"
>
<application android:icon="(dra)a"le icon" android:la"el="(string app*name" > <activit+ android:name="#adastro$essoa"> <intent-filter> <action android:name="android.intent.action.,-.%">< action> <categor+ android:name="android.intent.categor+./-0%#123">< categor+> < intent-filter> < activit+> <activit+ android:name="2ditar$essoa">< activit+> <activit+ android:name="4uscar$essoa">< activit+> < application> < manifest>
54s. 6esse 71# con-i urei as classes de visual, e in-ormei a classe que ser criada por inicio. Crie uma pasta C,amada !dra8a4le! acima das outras pastas !dra8a4le 9.9! 6as pastas dra8a4le adiciona as se uintes ima ens (:ma ens estar0o dispon;veis para do8nload). $ ora vamos ajeitar nossas classes e o la*out das telas. Vamos criar primeiro os -ormulrios para nosso visual, na pasta res, crie < arquivos !$ndroid 71# #a*out File! com os se uintes nomes !pessoa=lin,a=ta4ela!, !-orm=4uscar=pessoa!, !-orm=editar=pessoa!, deleta o main.2ml 6o -orm=4uscar=pessoa, de um duplo clic3, e na a4a !-orm=4uscar=pessoa.2ml!, dei2e da se uinte maneira.
<?xml version="1.0" encoding="utf-8"?> <5a"le/a+out xmlns:android="http: schemas.android.com ap! res android" android:la+out*height="fill*parent" android:la+out*)idth="fill*parent" android:"ac!ground="6ffffff"> <5a"le3o)> <5ext'ie) android:id="(7id text1" android:text="%ome:" android:text#olor="6000000" > <2dit5ext android:id="(7id campo%ome" android:)idth="890px" > < 5a"le3o)> <5a"le3o)> <.mage4utton android:src="(dra)a"le pes:uisar" android:id="(7id "t4uscar" android:text="4uscar" > < 5a"le3o)> <5a"le3o)> <5ext'ie) android:id="(7id text8" android:text="#pf:" android:text#olor="6000000" > <2dit5ext android:id="(7id campo#pf" > < 5a"le3o)> <5a"le3o)> <5ext'ie) android:id="(7id text;" android:text=".dade:" android:text#olor="6000000" > <2dit5ext android:id="(7id campo.dade" > < 5a"le3o)> < 5a"le/a+out>
$ parte de la*out, j est pronta, a ora vamos -a+er a parte das classes, dei2e a classe Pessoa da se uinte maneira .
pac!age com."r.#ad$essoa= import android.content.#ontent0ris= import android.net.0ri=
import android.provider.4ase#olumns= pu"lic class $essoa > pu"lic static &tring?@ colunas = ne) &tring?@ > $essoas.*.AB $essoas.%C,2B $essoas.#$DB $essoas..A-A2 E= pu"lic static final &tring -051C3.5F = "com."r.#ad$essoa.provider.pessoa"= pu"lic pu"lic pu"lic pu"lic long id= &tring nome= &tring cpf= int idade=
pu"lic $essoaGH > E pu"lic $essoaG&tring nomeB &tring cpfB int idadeH > superGH= this.nome = nome= this.cpf = cpf= this.idade = idade= E pu"lic $essoaGlong idB &tring nomeB &tring cpfB int idadeH > superGH= this.id = id= this.nome = nome= this.cpf = cpf= this.idade = idade= E II I #lasse interna para representar as colunas e ser utiliJada por um #ontent I $rovider I I Dilha de 4ase#olumns :ue KL define G*id e *countHB para seguir o padrMo I -ndroid I pu"lic static final class $essoas implements 4ase#olumns > %Mo pode instanciar esta #lasse private $essoasGH > E pu"lic static final 0ri #C%52%5*03. = 0ri.parseG"content: 7 " pessoas"H= pu"lic static final &tring #C%52%5*5F$2 = "vnd.android.cursor.dir vnd.google.pessoas"= pu"lic static final &tring #C%52%5*.52,*5F$2 = "vnd.android.cursor.item vnd.google.pessoas"= pu"lic static final &tring A2D-0/5*&C35*C3A23 = "*id -&#"= pu"lic static final &tring %C,2 = "nome"= pu"lic static final &tring #$D = "cpf"= pu"lic static final &tring .A-A2 = ".A-A2"= pu"lic static 0ri get0ri.dGlong idH > -diciona o id na 03. default do pessoas " 7 -051C3.5F
idH= E E
(Cverride pu"lic &tring to&tringGH > return "%ome: " 7 nome 7 "B cpf: " 7 cpf 7 "B .dade: " 7 idade= E E
pu"lic class #adastro$essoa extends /ist-ctivit+ > protected static final int .%&23.3*2A.5-3 = 1= protected static final int 40&#-3 = 8= pu"lic static 3epositorio$essoa repositorio= private /ist<$essoa> pessoas= (Cverride pu"lic void on#reateG4undle icicleH > super.on#reateGicicleH= repositorio = ne) 3epositorio$essoa&criptGthisH= atualiJar/istaGH= E protected void atualiJar/istaGH > $ega a lista de pessoas e exi"e na tela pessoas = repositorio.listar$essoasGH= -daptador de lista customiJado para cada linha de uma pessoa set/ist-dapterGne) $essoa/ist-dapterGthisB pessoasHH=
(Cverride pu"lic "oolean on#reateCptions,enuG,enu menuH > super.on#reateCptions,enuGmenuH= menu.addG0B .%&23.3*2A.5-3B 0B ".nserir %ovo"H.set.conG3.dra)a"le.novoH= menu.addG0B 40&#-3B 0B "4uscar"H.set.conG3.dra)a"le.pes:uisarH= return true= E (Cverride
pu"lic "oolean on,enu.tem&electedGint feature.dB ,enu.tem itemH > #licou no menu s)itch Gitem.get.tem.dGHH > case .%&23.3*2A.5-3: -"re a tela com o formulLrio para adicionar start-ctivit+Dor3esultGne) .ntentGthisB 2ditar$essoa.classHB .%&23.3*2A.5-3H= "rea!= case 40&#-3: -"re a tela para "uscar a pessoa pelo nome start-ctivit+Gne) .ntentGthisB 4uscar$essoa.classHH= "rea!= E return true= E (Cverride protected void on/ist.tem#lic!G/ist'ie) lB 'ie) vB int posicaoB long idH > super.on/ist.tem#lic!GlB vB posicaoB idH= editar$essoaGposicaoH= E 3ecupera o id da pessoaB e a"re a tela de ediNMo protected void editar$essoaGint posicaoH > 0suLrio clicou em alguma pessoa da lista 3ecupera a pessoa selecionado $essoa pessoa = pessoas.getGposicaoH= #ria a intent para a"rir a tela de editar .ntent it = ne) .ntentGthisB 2ditar$essoa.classH= $assa o id da pessoa como parOmetro it.put2xtraG$essoas.*.AB pessoa.idH= -"re a tela de ediNMo start-ctivit+Dor3esultGitB .%&23.3*2A.5-3H= E (Cverride protected void on-ctivit+3esultGint codigoB int codigo3etornoB .ntent itH > super.on-ctivit+3esultGcodigoB codigo3etornoB itH= Puando a activit+ 2ditar$essoa retornarB seKa se foi para adicionar vamos atualiJar a lista if Gcodigo3etorno == 32&0/5*CQH > atualiJa a lista na tela atualiJar/istaGH= E E (Cverride protected void onAestro+GH > super.onAestro+GH= Decha o "anco repositorio.fecharGH=
E E
pu"lic class 2ditar$essoa extends -ctivit+ > static final int 32&0/5*&-/'-3 = 1= static final int 32&0/5*2R#/0.3 = 8= #ampos texto private 2dit5ext campo%ome= private 2dit5ext campo#pf= private 2dit5ext campo.dade= private /ong id= (Cverride protected void on#reateG4undle icicleH > super.on#reateGicicleH= set#ontent'ie)G3.la+out.form*editar*pessoaH= campo%ome = G2dit5extH find'ie)4+.dG3.id.campo%omeH= campo#pf = G2dit5extH find'ie)4+.dG3.id.campo#pfH= campo.dade = G2dit5extH find'ie)4+.dG3.id.campo.dadeH= id = null= 4undle extras = get.ntentGH.get2xtrasGH= &e for para 2ditarB recuperar os valores ... if Gextras S= nullH > id = extras.get/ongG$essoas.*.AH= if Gid S= nullH > T uma ediNMoB "usca o pessoa... $essoa p = "uscar$essoaGidH= campo%ome.set5extGp.nomeH= campo#pf.set5extGp.cpfH= campo.dade.set5extG&tring.valueCfGp.idadeHH= E
.mage4utton "t#ancelar = G.mage4uttonH find'ie)4+.dG3.id."t#ancelarH= "t#ancelar.setCn#lic!/istenerGne) Cn#lic!/istenerGH > pu"lic void on#lic!G'ie) vie)H > set3esultG32&0/5*#-%#2/2AH= Decha a tela finishGH= E EH= /istener para salvar a pessoa .mage4utton "t&alvar = G.mage4uttonH find'ie)4+.dG3.id."t&alvarH= "t&alvar.setCn#lic!/istenerGne) Cn#lic!/istenerGH > pu"lic void on#lic!G'ie) vie)H > salvarGH= E EH= .mage4utton "t2xcluir = G.mage4uttonH find'ie)4+.dG3.id."t2xcluirH=
if Gid == nullH > &e id estL nuloB nMo pode excluir "t2xcluir.set'isi"ilit+G'ie)..%'.&.4/2H= E else > /istener para excluir a pessoa "t2xcluir.setCn#lic!/istenerGne) Cn#lic!/istenerGH > pu"lic void on#lic!G'ie) vie)H > excluirGH= E EH= E
(Cverride protected void on$auseGH > super.on$auseGH= #ancela para nMo ficar nada na tela pendente set3esultG32&0/5*#-%#2/2AH= Decha a tela finishGH=
pu"lic void salvarGH > int idade = 0= tr+ > idade = .nteger.parse.ntGcampo.dade.get5extGH.to&tringGHH= E catch G%um"erDormat2xception eH > E $essoa pessoa = ne) $essoaGH= if Gid S= nullH > U uma atualiJaNMo pessoa.id = id= E pessoa.nome = campo%ome.get5extGH.to&tringGH= pessoa.cpf = campo#pf.get5extGH.to&tringGH= pessoa.idade = idade= &alvar salvar$essoaGpessoaH= CQ set3esultG32&0/5*CQB ne) .ntentGHH= Decha a tela finishGH= E pu"lic void excluirGH > if Gid S= nullH > excluir$essoaGidH= E CQ set3esultG32&0/5*CQB ne) .ntentGHH= Decha a tela finishGH= E 4uscar a pessoa pelo id protected $essoa "uscar$essoaGlong idH >
return #adastro$essoa.repositorio."uscar$essoaGidH=
&alvar a pessoa protected void salvar$essoaG$essoa pessoaH > #adastro$essoa.repositorio.salvarGpessoaH= E 2xcluir a pessoa protected void excluir$essoaGlong idH > #adastro$essoa.repositorio.deletarGidH= E E
pu"lic $essoaGH > E pu"lic $essoaG&tring nomeB &tring cpfB int idadeH > superGH= this.nome = nome= this.cpf = cpf= this.idade = idade= E pu"lic $essoaGlong idB &tring nomeB &tring cpfB int idadeH > superGH= this.id = id= this.nome = nome= this.cpf = cpf= this.idade = idade= E II I #lasse interna para representar as colunas e ser utiliJada por um #ontent I $rovider I I Dilha de 4ase#olumns :ue KL define G*id e *countHB para seguir o padrMo I -ndroid I pu"lic static final class $essoas implements 4ase#olumns >
%Mo pode instanciar esta #lasse private $essoasGH > E pu"lic static final 0ri #C%52%5*03. = 0ri.parseG"content: 7 " pessoas"H= pu"lic static final &tring #C%52%5*5F$2 = "vnd.android.cursor.dir vnd.google.pessoas"= pu"lic static final &tring #C%52%5*.52,*5F$2 = "vnd.android.cursor.item vnd.google.pessoas"= pu"lic static final &tring A2D-0/5*&C35*C3A23 = "*id -&#"= pu"lic static final &tring %C,2 = "nome"= pu"lic static final &tring #$D = "cpf"= pu"lic static final &tring .A-A2 = "idade"= pu"lic static 0ri get0ri.dGlong idH > -diciona o id na 03. default do pessoas 0ri uri$essoas = #ontent0ris.)ith-ppended.dG$essoas.#C%52%5*03.B E E (Cverride pu"lic &tring to&tringGH > return "%ome: " 7 nome 7 "B cpf: " 7 cpf 7 "B .dade: " 7 idade= E E return uri$essoas= " 7 -051C3.5F
idH=
pu"lic class $essoa/ist-dapter extends 4ase-dapter > private #ontext context= private /ist<$essoa> lista= pu"lic $essoa/ist-dapterG#ontext contextB /ist<$essoa> listaH > this.context = context= this.lista = lista= E pu"lic int get#ountGH > return lista.siJeGH= E
pu"lic C"Kect get.temGint positionH > return lista.getGpositionH= E pu"lic long get.tem.dGint positionH > return position= E pu"lic 'ie) get'ie)Gint positionB 'ie) convert'ie)B 'ie)Vroup parentH > 3ecupera a pessoa da posiNMo atual $essoa p = lista.getGpositionH= /a+out.nflater inflater = G/a+out.nflaterH context.get&+stem&erviceG#ontext./-FC05*.%D/-523*&23'.#2H= 'ie) vie) = inflater.inflateG3.la+out.pessoa*linha*ta"elaB nullH= -tualiJa o valor do 5ext'ie) 5ext'ie) nome = G5ext'ie)H vie).find'ie)4+.dG3.id.nomeH= nome.set5extGp.nomeH= 5ext'ie) cpf = G5ext'ie)H vie).find'ie)4+.dG3.id.cpfH= cpf.set5extGp.cpfH= 5ext'ie) idade = G5ext'ie)H vie).find'ie)4+.dG3.id.idadeH= idade.set5extG&tring.valueCfGp.idadeHH= E E return vie)=
pu"lic class 3epositorio$essoa > private static final &tring #-52VC3.- = "dados"= %ome do "anco private static final &tring %C,2*4-%#C = "dados*android"= %ome da ta"ela pu"lic static final &tring %C,2*5-42/- = "pessoa"= protected &P/iteAata"ase d"= pu"lic 3epositorio$essoaG#ontext ctxH > -"re o "anco de dados KL existente d" = ctx.openCr#reateAata"aseG%C,2*4-%#CB #ontext.,CA2*$3.'-52B nullH= E
protected 3epositorio$essoaGH > -penas para criar uma su"classe... E &alva a pessoaB insere um novo ou atualiJa pu"lic long salvarG$essoa pessoaH > long id = pessoa.id= if Gid S= 0H > atualiJarGpessoaH= E else > .nsere novo id = inserirGpessoaH= E E return id=
.nsere uma nova pessoa pu"lic long inserirG$essoa pessoaH > #ontent'alues values = ne) #ontent'aluesGH= values.putG$essoas.%C,2B pessoa.nomeH= values.putG$essoas.#$DB pessoa.cpfH= values.putG$essoas..A-A2B pessoa.idadeH= long id = inserirGvaluesH= return id= E .nsere uma nova pessoa pu"lic long inserirG#ontent'alues valoresH > long id = d".insertG%C,2*5-42/-B ""B valoresH= return id= E -tualiJa a pessoa no "anco. C id da pessoa T utiliJado. pu"lic int atualiJarG$essoa pessoaH > #ontent'alues values = ne) #ontent'aluesGH= values.putG$essoas.%C,2B pessoa.nomeH= values.putG$essoas.#$DB pessoa.cpfH= values.putG$essoas..A-A2B pessoa.idadeH= &tring *id = &tring.valueCfGpessoa.idH= &tring )here = $essoas.*.A 7 "=?"= &tring?@ )here-rgs = ne) &tring?@ > *id E= int count = atualiJarGvaluesB )hereB )here-rgsH= E return count=
-tualiJa a pessoa com os valores a"aixo - clLusula )here T utiliJada para identificar a pessoa a ser atualiJado pu"lic int atualiJarG#ontent'alues valoresB &tring )hereB &tring?@ )here-rgsH > int count = d".updateG%C,2*5-42/-B valoresB )hereB )here-rgsH= /og.iG#-52VC3.-B "-tualiJou ?" 7 count 7 "@ registros"H= return count= E Aeleta a pessoa com o id fornecido pu"lic int deletarGlong idH >
&tring )here = $essoas.*.A 7 "=?"= &tring *id = &tring.valueCfGidH= &tring?@ )here-rgs = ne) &tring?@ > *id E= int count = deletarG)hereB )here-rgsH= return count= E Aeleta a pessoa com os argumentos fornecidos pu"lic int deletarG&tring )hereB &tring?@ )here-rgsH > int count = d".deleteG%C,2*5-42/-B )hereB )here-rgsH= /og.iG#-52VC3.-B "Aeletou ?" 7 count 7 "@ registros"H= return count= E 4usca a pessoa pelo id pu"lic $essoa "uscar$essoaGlong idH > select I from pessoa )here *id=? #ursor c = d".:uer+GtrueB %C,2*5-42/-B $essoa.colunasB $essoas.*.A 7 "=" 7 idB nullB nullB nullB nullB nullH= if Gc.get#ountGH > 0H > $osicinoa no primeiro elemento do cursor c.move5oDirstGH= $essoa pessoa = ne) $essoaGH= /W os dados pessoa.id = c.get/ongG0H= pessoa.nome = c.get&tringG1H= pessoa.cpf = c.get&tringG8H= pessoa.idade = c.get.ntG;H= E E 3etorna um cursor com todas as pessoas pu"lic #ursor get#ursorGH > tr+ > select I from pessoas return d".:uer+G%C,2*5-42/-B $essoa.colunasB nullB nullB nullB nullB nullB nullH= E catch G&P/2xception eH > /og.eG#-52VC3.-B "2rro ao "uscar as pessoas: " 7 e.to&tringGHH= return null= E E 3etorna uma lista com todas as pessoas pu"lic /ist<$essoa> listar$essoasGH > #ursor c = get#ursorGH= /ist<$essoa> pessoas = ne) -rra+/ist<$essoa>GH= if Gc.move5oDirstGHH > 3ecupera os Xndices das colunas int idx.d = c.get#olumn.ndexG$essoas.*.AH= return pessoa=
return null=
int idx%ome = c.get#olumn.ndexG$essoas.%C,2H= int idx#pf = c.get#olumn.ndexG$essoas.#$DH= int idxidade = c.get#olumn.ndexG$essoas..A-A2H= /oop atT o final do > $essoa pessoa = ne) $essoaGH= pessoas.addGpessoaH= recupera os atri"utos da pessoa pessoa.id = c.get/ongGidx.dH= pessoa.nome = c.get&tringGidx%omeH= pessoa.cpf = c.get&tringGidx#pfH= pessoa.idade = c.get.ntGidxidadeH= E )hile Gc.move5o%extGHH= E E return pessoas=
4usca a pessoa pelo nome "select I from pessoa )here nome=?" pu"lic $essoa "uscar$essoa$or%omeG&tring nomeH > $essoa pessoa = null= tr+ > .dem a: &2/2#5 *idBnomeBcpfBidade from pessoa )here nome = ? #ursor c = d".:uer+G%C,2*5-42/-B $essoa.colunasB $essoas.%C,2 7 "=Y" 7 nome 7 "Y"B nullB nullB nullB nullH= &e encontrou... if Gc.move5o%extGHH > pessoa = ne) $essoaGH= utiliJa os mTtodos get/ongGHB get&tringGHB get.ntGHB etc para recuperar os valores pessoa.id = c.get/ongG0H= pessoa.nome = c.get&tringG1H= pessoa.cpf = c.get&tringG8H= pessoa.idade = c.get.ntG;H= E E catch G&P/2xception eH > /og.eG#-52VC3.-B "2rro ao "uscar a pessoa pelo nome: " 7 e.to&tringGHH= return null= E E return pessoa=
4usca uma pessoa utiliJando as configuraNZes definidas no &P/itePuer+4uilder 0tiliJado pelo #ontent $rovider de pessoa pu"lic #ursor :uer+G&P/itePuer+4uilder :uer+4uilderB &tring?@ proKectionB &tring selectionB &tring?@ selection-rgsB &tring group4+B &tring havingB &tring order4+H > #ursor c = :uer+4uilder.:uer+Gthis.d"B proKectionB selectionB selection-rgsB group4+B havingB order4+H= return c= E Decha o "anco pu"lic void fecharGH >
class &P/ite1elper extends &P/iteCpen1elper > private static final &tring #-52VC3.- = "livro"= private &tring?@ script&P/#reate= private &tring script&P/Aelete= II I #ria uma instOncia de &P/ite1elper I I (param context I (param nome4anco nome do "anco de dados I (param versao4anco versMo do "anco de dados Gse for diferente T para atualiJarH I (param script&P/#reate &P/ com o create ta"le.. I (param script&P/Aelete &P/ com o drop ta"le... I &P/ite1elperG#ontext contextB &tring nome4ancoB int versao4ancoB &tring?@ script&P/#reateB &tring script&P/AeleteH > superGcontextB nome4ancoB nullB versao4ancoH= this.script&P/#reate = script&P/#reate= this.script&P/Aelete = script&P/Aelete= E (Cverride #riar novo "anco... pu"lic void on#reateG&P/iteAata"ase d"H > /og.iG#-52VC3.-B "#riando "anco com s:l"H= int :tde&cripts = script&P/#reate.length= 2xecuta cada s:l passado como parOmetro for Gint i = 0= i < :tde&cripts= i77H > &tring s:l = script&P/#reate?i@= /og.iG#-52VC3.-B s:lH= #ria o "anco de dados executando o script de criaNMo d".exec&P/Gs:lH= E
(Cverride ,udou a versMo... pu"lic void on0pgradeG&P/iteAata"ase d"B int versao-ntigaB int nova'ersaoH > /og.)G#-52VC3.-B "-tualiJando da versMo " 7 versao-ntiga 7 " para " 7 nova'ersao 7 ". 5odos os registros serMo deletados."H= /og.iG#-52VC3.-B script&P/AeleteH= Aeleta as ta"elas... d".exec&P/Gscript&P/AeleteH= #ria novamente... on#reateGd"H= E E