Você está na página 1de 41

8anco de uados

rogramao para a laLaforma Androld - Aula 11


lnLroduo a llnguagem SCL
C banco de dados SCLlLe
Como crlar e manlpular um banco de dados em Androld
Como apresenLar dados na Lela do aparelho celular
Como crlar um log slmples de evenLos
Cuals so as esLruLuras de dados mals comuns em !ava?
SCLlLe
Androld dlsponlblllza um banco de dados
chamado SCLlLe.
SCLlLe e o banco de dados padro em vrlas
ouLras apllcaes: llrefox, lhone, Symbla,
Skype, eLc.
SCLlLe no possul llcena, sendo de domlnlo
publlco.
Para usar SQLite,
preciso saber
um pouco de SQL.
Vocs lembram de
alguma query?
Comandos de uenlo
ara crlar uma Labela, podemos usar o
comando abalxo:
creaLe Lable myLable (
_ld lnLeger prlmary key auLolncremenL,
name LexL,
phone LexL
),
E mais quais
comandos ns
temos em SQL?
Q
u
a
l o

sig
n
i
ca
d
o

d
e
sse
co
m
a
n
d
o
?

Comandos de Modlcao
ara lnserlr algumas enLradas em nosso banco
de dados de exemplo, podemos usar os
comandos abalxo:
lnserL lnLo myLable values(null, 'SLeven klng', '333-1212'),
lnserL lnLo myLable values(null, '!ohn SmlLh', '333-2343'),
lnserL lnLo myLable values(null, 'lred SmlLhelzen', '333-4321'),
Falta uma
categoria de
comandos
Comandos de ConsulLa
C que fazem os segulnLes comandos SCL?
selecL * from myLable where(_ld=3),
selecL name, phone from myLable where(name llke "smlLh"),
Log de LvenLos
Logando Eventos
Crie um banco de dados
que logue eventos. Um
evento possui um ttulo e
o tempo em que
aconteceu. Eventos so
criados via um mtodo
addEvents(ttulo).
C 8anco de uados
!"#$%& (&)*+ ),-%$!-.#%$/!-0%.1)(02$34",(.5678
!"#$%& (&)*+ +$".)43)99.2$,(&),&(.!"#$%&'"(%)
!"#$%& (&)*+ +$".)43)99.2$,(&),&(.!+(%)
!"#$%& (&)*+ +$".)43)99.2$,(&),&(.!+!$%)
publlc class LvenLsuaLa exLends SCLlLeCpenPelper [
prlvaLe sLauc nal SLrlng uA1A8ASL_nAML = "evenLs.db",
prlvaLe sLauc nal lnL uA1A8ASL_vL8SlCn = 1,
publlc LvenLsuaLa(ConLexL cLx) [
super(cLx, uA1A8ASL_nAML, null, uA1A8ASL_vL8SlCn),
}
publlc vold onCreaLe(SCLlLeuaLabase db) [
-:.0;0+<=>?@2ABCDB DC1>B @ E DC1>B5FCGB E @ ?@ E 567
E @ 6FDBHBA IA6GCAJ KBJ CLDM6F2ABGBFDN @ E D6GB
E @ 6FDBHBAN@ E D6D>B E @ DBOD FMD FL>>P8@P8
}
publlc vold onupgrade(SCLlLeuaLabase db, lnL oldverslon, lnL newverslon) [
db.execSCL("u8C 1A8LL ll LxlS1S " + 1A8LL_nAML),
onCreaLe(db),
}
}
Algum sabe o
que so essas
importaes
estticas?
E o que faz esse
com
ando SQL?
LvenLsuaLa.[ava
lmporLaes LsLucas
lmporL androld.provlder.8aseColumns,
publlc lnLerface ConsLanLs exLends 8aseColumns [
nal SLrlng 1A8LL_nAML = "evenLs",
nal SLrlng 1lML = "ume",
nal SLrlng 1l1LL = "uLle",
}
Precisamos de
um layout para
mostrar
eventos.
ConsLanLs.[ava
8om e velho ScrollLayouL
<?xml verslon="1.0" eocoJloq="oq-8"?>
<Scrollvlew
xmlns:androld="bup.//scbemos.ooJtolJ.com/opk/tes/ooJtolJ"
androld:layouL_wldLh="fll_poteot"
androld:layouL_helghL="fll_poteot">
<1exLvlew
androld:ld="-lJ/text"
androld:layouL_wldLh="fll_poteot"
androld:layouL_helghL="wtop_cooteot" />
</Scrollvlew>
E com
o seria o
program
a
principal?
maln.xml
C rograma rlnclpal
publlc class AulaAcuvlLy11 exLends AcuvlLy [
prlvaLe LvenLsuaLa evenLs,
[Cverrlde
publlc vold onCreaLe(8undle savedlnsLanceSLaLe) [
super.onCreaLe(savedlnsLanceSLaLe),
seLConLenLvlew(8.layouL.molo),
evenLs = new LvenLsuaLa(Lhls),
Lry [
)--B/0,&("Pello, Androld!"),
Cursor cursor = Q0&B/0,&((),
(R$SB/0,&((cursor),
} nally [
evenLs.close(),
}
}
}
Como criar
novos
eventos?
Como ler
esses
eventos?
AulaAcuvlLy11.[ava
E
com
o
m
ostrar
esses even
tos
n
a tela?
Crlando LvenLos
prlvaLe vold addLvenL(SLrlng sLrlng) [
SCLlLeuaLabase db = evenLs.geLWrlLableuaLabase(),
ConLenLvalues values = new ConLenLvalues(),
values.puL(1lML, SysLem.currenL1lmeMlllls()),
values.puL(1l1LL, sLrlng),
db.!,(0%&M%DR%$S(1A8LL_nAML, null, values),
}
Qual a
semntica
desse mtodo?
Ainda falta
sermos capazes
de ler eventos!
AulaAcuvlLy11.[ava
Lendo LvenLos
prlvaLe sLauc SLrlng[] l8CM = [ _lu, 1lML, 1l1LL, },
prlvaLe sLauc SLrlng C8uL8_8? = 1lML + " uLSC",
prlvaLe Cursor geLLvenLs() [
SCLlLeuaLabase db = evenLs.geL8eadableuaLabase(),
Cursor cursor = db
.query(DC1>B5FCGBN TAMGN ,433N ,433N ,433N ,433N MA7BA51J),
sLarLManaglngCursor(+4%($%),
reLurn cursor,
}
Qual deve ser a
semntica de
cada um desses
argumentos?
E o que deve ser
um
cursor?
Quais m
todos
ele deve ter?
E como mostrar
todos os
eventos logados
na tela?
AulaAcuvlLy11.[ava
MosLrando LvenLos na 1ela
Vocs saberiam
logar eventos de
D-pad?
E
e
v
e
n
t
o
s
d
e

t
e
c
la
d
o
?

E
q
u
e
o
u
t
r
o
s

e
v
e
n
t
o
s
?

prlvaLe vold showLvenLs(Cursor cursor) [
SLrlng8ullder bullder = new SLrlng8ullder( "Saved evenLs:\n"),
whlle (cursor.move1onexL()) [
long ld = cursor.geLLong(0),
long ume = cursor.geLLong(1),
SLrlng uLle = cursor.geLSLrlng(2),
bullder.append(ld).append(": "),
bullder.append(ume).append(": "),
bullder.append(uLle).append("\n"),
}
1exLvlew LexL = (1exLvlew) ndvlew8yld(8.ld.LexL),
LexL.seL1exL(bullder),
}
AulaAcuvlLy11.[ava
CuLros LvenLos
publlc boolean onkeyuown(lnL keyCode, keyLvenL evenL) [
swlLch (keyCode) [
case keyLvenL.kL?CCuL_0:
case keyLvenL.kL?CCuL_1:
case keyLvenL.kL?CCuL_2:
case keyLvenL.kL?CCuL_3:
case keyLvenL.kL?CCuL_4:
case keyLvenL.kL?CCuL_3:
case keyLvenL.kL?CCuL_6:
case keyLvenL.kL?CCuL_7:
case keyLvenL.kL?CCuL_:
case keyLvenL.kL?CCuL_:
addLvenL("number pressed"),
1oasL L1 = 1oasL.make1exL(Lhls,
"number pressed", 1oasL.LLn1P_SPC81),
L1.seLravlLy(ravlLy.CLn1L8, 0, 0),
L1.show(),
break,
case keyLvenL.kL?CCuL_SACL:
addLvenL("Space pressed"),
1oasL L2 = 1oasL.make1exL(Lhls,
"Space pressed", 1oasL.LLn1P_SPC81),
L2.seLravlLy(ravlLy.CLn1L8, 0, 0),
L2.show(),
break,
defaulL:
reLurn super.onkeyuown(keyCode, evenL),
}
showLvenLs(geLLvenLs()),
reLurn Lrue,
}
AulaAcuvlLy11.[ava
Assoclando uados a
vlses
Androld dlsponlblllza
aos desenvolvedores
alguns recursos grcos
para a exlblo de
Labelas.
Compare, por exemplo:
E
c
o
m
o
c
r
i
a
r

u
m
l
a
y
o
u
t

c
o
m
o
e
s
s
e
?

LlsLAcuvlLy
lmporL androld.app.LlsLAcuvlLy,
publlc class LvenLLlsL exLends LlsLAcuvlLy [
prlvaLe LvenLsuaLa evenLs,
[Cverrlde
publlc vold onCreaLe(8undle savedlnsLanceSLaLe) [
super.onCreaLe(savedlnsLanceSLaLe),
seLConLenLvlew(8.layouL.evLllsL),
evenLs = new LvenLsuaLa(Lhls),
Lry [
addLvenL("Pello, Androld!"),
Cursor cursor = geLLvenLs(),
showLvenLs(cursor),
} nally [
evenLs.close(),
}
}
}
LvenLLlsL.[ava
E
x
iste u
m
lay
ou
t
prprio para
listas.
Listas so feitas
para exibir itens
de um banco de
dados.
LayouL de LlsLa
<?xml verslon="1.0" encodlng="u-"?>
<LlnearLayouL
xmlns:androld="hp://schemas.androld.com/apk/res/androld"
androld:layouL_wldLh="ll_parenL"
androld:layouL_helghL="ll_parenL">
<!- vejo os lus bollt-lo Je 'llst' e 'empty' -->
<LlsLvlew
androld:ld="U),-%$!-V!-W3!(&"
androld:layouL_wldLh="wrap_conLenL"
androld:layouL_helghL="wrap_conLenL"/>
<1exLvlew
androld:ld="U),-%$!-V!-W0"#&X"
androld:layouL_wldLh="wrap_conLenL"
androld:layouL_helghL="wrap_conLenL"
androld:LexL="[sLrlng/empLy" />
</LlnearLayouL>
A
g
o
r
a

p
r
e
c
is
o

a
lte
r
a
r
o
m

to
d
o
s
h
o
w
E
v
e
n
ts
p
a
r
a
u
s
a
r
a
lis
ta
, e
m
v
e
z

d
a
c
a
ix
a
d
e
te
x
to
.
evLllsL.xml
AdapLadores
lmporL androld.wldgeL.SlmpleCursorAdapLer,
lmporL sLauc androld.provlder.8aseColumns._lu,
prlvaLe sLauc SLrlng[] l8CM = [ _lu, 1lML, 1l1LL, },
prlvaLe sLauc lnL[] 1C = [ 8.ld.rowld, 8.ld.ume, 8.ld.uLle, },
prlvaLe vold showLvenLs(Cursor cursor) [
SlmpleCursorAdapLer adapLer = new
SlmpleCursorAdapLer(Lhls, A.3)X$4&.!&0",
cursor, l8CM, 1C),
seLLlsLAdapLer(adapLer),
}
Precisamos de
um layout para
cada item de
lista.
LvenLLlsL.[ava
LayouLs 8elauvos
<?xml verslon="1.0" eocoJloq="oq-8"?>
<8elauveLayouL
xmlns:androld="bup.//scbemos.ooJtolJ.com/opk/tes/ooJtolJ"
androld:layouL_wldLh="fll_poteot"
androld:layouL_helghL="fll_poteot"
androld:orlenLauon="botlzootol"
androld:paddlng="10sp">
<1exLvlew
androld:ld="-lJ/towlJ"
androld:layouL_wldLh="wtop_cooteot"
androld:layouL_helghL="wtop_cooteot" />
<1exLvlew
androld:ld="-lJ/towlJcoloo"
androld:layouL_wldLh="wtop_cooteot"
androld:layouL_helghL="wtop_cooteot"
androld:LexL=". "
androld:layouL_Lo8lghLCf="lJ/towlJ" />
<1exLvlew
androld:ld="-lJ/ume"
androld:layouL_wldLh="wtop_cooteot"
androld:layouL_helghL="wtop_cooteot"
androld:layouL_Lo8lghLCf="lJ/towlJcoloo" />
<1exLvlew
androld:ld="-lJ/umecoloo"
androld:layouL_wldLh="wtop_cooteot"
androld:layouL_helghL="wtop_cooteot"
androld:LexL=". "
androld:layouL_Lo8lghLCf="lJ/ume" />
<1exLvlew
androld:ld="-lJ/utle"
androld:layouL_wldLh="fll_poteot"
androld:layouL_helghL="wtop_cooteot"
androld:elllpslze="eoJ"
androld:slngleLlne="ttoe"
androld:layouL_Lo8lghLCf="lJ/umecoloo" />
</8elauveLayouL>
O que um
layout
relativo?
O que ser
exibido em

cada linha da
lista?
E como deve
ser o layout da
lista em si?
lLem.xml
8ullL-ln lus
<?xml verslon="1.0" encodlng="u-"?>
<LlnearLayouL
xmlns:androld="hp://schemas.androld.com/apk/res/androld"
androld:layouL_wldLh="ll_parenL"
androld:layouL_helghL="ll_parenL">
<LlsLvlew
androld:ld="[),-%$!-V!-W3!(&"
androld:layouL_wldLh="wrap_conLenL"
androld:layouL_helghL="wrap_conLenL"/>
<1exLvlew
androld:ld="[),-%$!-V!-W0"#&X"
androld:layouL_wldLh="wrap_conLenL"
androld:layouL_helghL="wrap_conLenL"
androld:LexL="[(&%!,QW0"#&X" />
</LlnearLayouL>
Qual o papel
da textView
nesse layout?
Onde esses
IDs foram
declarados?
E
on
de foi
declarada
essa
con
stan
te?
evLllsL.xml
SLrlngs
?xml verslon="1.0" encodlng="u-"?>
<resources>
<sLrlng name="app_name">LvenLs</sLrlng>
<sLrlng name="empLy">no evenLs!</sLrlng>
</resources>
sLrlngs.xml
addLvenLs e geLLvenLs
Lsses meLodos so os mesmos usados em
nossa prlmelra lmplemenLao.
prlvaLe vold addLvenL(SLrlng sLrlng) [
SCLlLeuaLabase db = evenLs.geLWrlLableuaLabase(),
ConLenLvalues values = new ConLenLvalues(),
values.puL(1lML, SysLem.currenL1lmeMlllls()),
values.puL(1l1LL, sLrlng),
db.lnserLCr1hrow(1A8LL_nAML, null, values),
}
prlvaLe sLauc SLrlng C8uL8_8? = 1lML + " uLSC",
prlvaLe Cursor geLLvenLs() [
SCLlLeuaLabase db = evenLs.geL8eadableuaLabase(),
Cursor cursor = db
.query(1A8LL_nAML, l8CM, null, null, null, null, C8uL8_8?),
sLarLManaglngCursor(cursor),
reLurn cursor,
}
LvenLLlsL.[ava
LvenLLlsL.[ava
LlsLvlew vs Scrollvlew
A prlnclpal dlferena das duas abordagens
aconLece no meLodo showEvents.
prlvaLe vold showLvenLs(Cursor cursor) [
SlmpleCursorAdapLer adapLer = new
SlmpleCursorAdapLer(Lhls, 8.layouL.lLem,
cursor, l8CM, 1C),
seLLlsLAdapLer(adapLer),
}
prlvaLe vold showLvenLs(Cursor cursor) [
SLrlng8ullder bullder =
new SLrlng8ullder( "Saved evenLs:\n"),
whlle (cursor.move1onexL()) [
long ld = cursor.geLLong(0),
long ume = cursor.geLLong(1),
SLrlng uLle = cursor.geLSLrlng(2),
bullder.append(ld).append(": "),
bullder.append(ume).append(": "),
bullder.append(uLle).append("\n"),
}
1exLvlew LexL = (1exLvlew) ndvlew8yld(8.ld.LexL),
LexL.seL1exL(bullder),
}
Scrollvlew LlsLvlew
Lxerclclo: evenLos de Loque
Modlque LlsLLvenL
para que essa
auvldade Lambem
LraLe evenLos de Loque.
Lsses evenLos devem
ser dlsparados na Lela
de auvldade, mas no
pela llsLa.
LvenLos de 1oque
[Cverrlde
publlc boolean on1ouchLvenL(MouonLvenL evenL) [
lf (evenL.geLAcuon() != MouonLvenL.AC1lCn_uCWn) [
addLvenL("1ouch LvenL!"),
1oasL L1 = 1oasL.make1exL(Lhls, "1ouch!", 1oasL.LLn1P_SPC81),
L1.seLravlLy(ravlLy.CLn1L8, 0, 0),
L1.show(),
}
showLvenLs(geLLvenLs()),
reLurn Lrue,
}
LvenLLlsL.[ava
Menu de ConLexLo
Apagando itens
Adicione um menu de
contexto lista, que d
ao usurio a opo de
apagar um item da lista.
8eglsLrando o menu
[Cverrlde
publlc vold onCreaLe(8undle savedlnsLanceSLaLe) [
super.onCreaLe(savedlnsLanceSLaLe),
seLConLenLvlew(8.layouL.evLllsL),
evenLs = new LvenLsuaLa(Lhls),
%0Q!(&0%T$%2$,&0;&G0,4?Q0&>!(&Y!0S?PP8
Lry [
addLvenL("Pello, Androld!"),
Cursor cursor = geLLvenLs(),
showLvenLs(cursor),
} nally [
evenLs.close(),
}
}
LvenLLlsL.[ava
uenlndo o Menu
prlvaLe nal lnL del = 0,
[Cverrlde
publlc nal vold onCreaLeConLexLMenu
(nal ConLexLMenu menu, nal vlew v,
nal ConLexLMenulnfo menulnfo) [
super.onCreaLeConLexLMenu(menu, v, menulnfo),
menu.add(Menu.nCnL, del, Menu.nCnL, "uLL"),
}
LvenLLlsL.[ava
1raLando opes
publlc nal boolean onConLexLlLemSelecLed(nal MenulLem lLem) [
AdapLerConLexLMenulnfo lnfo =
(AdapLerConLexLMenulnfo) lLem.geLMenulnfo(),
8elauveLayouL rl = (8elauveLayouL)lnfo.LargeLvlew,
1exLvlew Lv = (1exLvlew)rl.geLChlldAL(0),
SLrlng sLrld = Lv.geL1exL().LoSLrlng(),
swlLch (lLem.geLlLemld()) [
case del:
SCLlLeuaLabase db = evenLs.geL8eadableuaLabase(),
db.deleLe(1A8LL_nAML, "_lu = " + sLrld, null),
showLvenLs(geLLvenLs()),
break,
}
reLurn Lrue,
}
LvenLLlsL.[ava
Adlclonando mals opes
Cancel
possvel que o usurio
mude de idia ao clicar
no item que precisa ser
removido. Adicione uma
opo CANCEL ao menu,
que lhe permita retornar
sem remover o item.
Cancel
prlvaLe nal lnL cancel = 1,
[Cverrlde
publlc nal vold onCreaLeConLexLMenu(nal ConLexLMenu menu, nal vlew v,
nal ConLexLMenulnfo menulnfo) [
super.onCreaLeConLexLMenu(menu, v, menulnfo),
menu.add(Menu.nCnL, del, Menu.nCnL, "uLL"),
menu.add(Menu.nCnL, cancel, Menu.nCnL, "CAnCLL"),
}
E como tratar
a escolha do
novo item?
LvenLLlsL.[ava
publlc nal boolean onConLexLlLemSelecLed(nal MenulLem lLem) [
AdapLerConLexLMenulnfo lnfo =
(AdapLerConLexLMenulnfo) lLem.geLMenulnfo(),
8elauveLayouL rl = (8elauveLayouL)lnfo.LargeLvlew,
1exLvlew Lv = (1exLvlew)rl.geLChlldAL(0),
SLrlng sLrld = Lv.geL1exL().LoSLrlng(),
swlLch (lLem.geLlLemld()) [
case del:
SCLlLeuaLabase db = evenLs.geL8eadableuaLabase(),
db.deleLe(1A8LL_nAML, "_lu = " + sLrld, null),
showLvenLs(geLLvenLs()),
break,
+)(0 +),+03V
:%0)Z8
}
reLurn Lrue,
}
LvenLLlsL.[ava
Lendo uma enLrada especlca
Visualizando itens
Adicione um terceiro
item ao seu menu. Esse
item, SHOW, dever
mostrar um item
selecionado. Use a sada
de Log para exibir
informaes sobre esse
item.
nova opo
prlvaLe nal lnL show = 2,
[Cverrlde
publlc nal vold onCreaLeConLexLMenu(nal ConLexLMenu menu, nal vlew v,
nal ConLexLMenulnfo menulnfo) [
super.onCreaLeConLexLMenu(menu, v, menulnfo),
menu.add(Menu.nCnL, del, Menu.nCnL, "uLL"),
menu.add(Menu.nCnL, show, Menu.nCnL, "SPCW"),
menu.add(Menu.nCnL, cancel, Menu.nCnL, "CAnCLL"),
}
Tratar esse
evento no
trivial.
Comece sendo
capaz de
selecionar o
item.
LvenLLlsL.[ava
Lendo um lLem especlco
publlc nal boolean onConLexLlLemSelecLed(nal MenulLem lLem) [
lf (lLem.geLlLemld() != cancel) [
AdapLerConLexLMenulnfo lnfo = (AdapLerConLexLMenulnfo) lLem.geLMenulnfo(),
8elauveLayouL rl = (8elauveLayouL) lnfo.LargeLvlew,
1exLvlew Lv = (1exLvlew) rl.geLChlldAL(0),
SLrlng sLrld = Lv.geL1exL().LoSLrlng(),
SCLlLeuaLabase db = evenLs.geL8eadableuaLabase(),
swlLch (lLem.geLlLemld()) [
case del:
db.deleLe(1A8LL_nAML, "_lu = " + sLrld, null),
break,
case show:
Cursor cursor = db
.query(1A8LL_nAML, l8CM, "_lu = " + sLrld, null, null, null, C8uL8_8?),
break,
}
showLvenLs(geLLvenLs()),
}
reLurn Lrue,
}
M
as, com
o ler
os dados do
cursor?
LvenLLlsL.[ava
Manlpulando o Cursor
case show:
Cursor cursor = db
.query(1A8LL_nAML, l8CM, "_lu = " + sLrld, null, null, null, C8uL8_8?),
Log.v("show", SLrlng.valueCf(cursor.geLColumnCounL())),
Log.v("show", cursor.geLColumnname(0)),
Log.v("show", cursor.geLColumnname(1)),
Log.v("show", cursor.geLColumnname(2)),
lnL umeColumn = cursor.geLColumnlndex(1lML),
lnL uLleColumn = cursor.geLColumnlndex(1l1LL),
cursor.move1ollrsL(),
SLrlng evenLSLr = cursor.geLSLrlng(uLleColumn),
evenLSLr += "(" + cursor.geLLong(umeColumn) + ")",
Log.v("show", evenLSLr),
break,
LvenLLlsL.[ava
Manlpulando o Cursor
case show:
Cursor cursor = db
.query(1A8LL_nAML, l8CM, "_lu = " + sLrld, null, null, null, C8uL8_8?),
Log.v("show", SLrlng.valueCf(cursor.geLColumnCounL())),
Log.v("show", cursor.geLColumnname(0)),
Log.v("show", cursor.geLColumnname(1)),
Log.v("show", cursor.geLColumnname(2)),
lnL umeColumn = cursor.geLColumnlndex(1lML),
lnL uLleColumn = cursor.geLColumnlndex(1l1LL),
cursor.move1ollrsL(),
SLrlng evenLSLr = cursor.geLSLrlng(uLleColumn),
evenLSLr += "(" + cursor.geLLong(umeColumn) + ")",
Log.v("show", evenLSLr),
break,
LvenLLlsL.[ava
prlvaLe sLauc nal lnL MAx_MLnu_lu = 0,
[Cverrlde
publlc boolean onCreaLeCpuonsMenu(Menu menu) [
menu.add(Menu.nCnL, MAx_MLnu_lu, Menu.nCnL, "eL CldesL"),
reLurn Lrue,
}
[Cverrlde
publlc boolean
onCpuonslLemSelecLed(MenulLem lLem) [
swlLch (lLem.geLlLemld()) [
case MAx_MLnu_lu:
C30%&7!)3$Q.14!3-0% :4!3-0% [ ,0S C30%&7!)3$Q.14!3-0%?&R!(P8
:4!3-0%.(0&G0(()Q0?@J$4 R)/0 (030+&0- ) "0,4\@P8
C30%&7!)3$Q )30%& [ :4!3-0%.+%0)&0?P8
alerL.show(),
reLurn Lrue,
defaulL:
,
}
reLurn false,
}
LvenLLlsL.[ava
O que esse
cdigo faz?
Esse um
exemplo de um
padro de
projetos. Qual?
Modique essa
aplicao, para ela
exibir na caixa o
evento mais
antigo.
Lendo o LvenLo mals Anugo
Modique essa
aplicao, para ela
exibir na caixa o
evento mais
antigo.
Comece criando um
mtodo getOldest, que
retorna o evento mais
antigo. Qual a
interface para esse
mtodo?
C LvenLo Mals Anugo
prlvaLe long geLCldesL(Cursor c) [
long oldesL1lme = 0L,
lnL umeColumn = c.geLColumnlndex(1lML),
for (c.move1ollrsL(), !c.lsLasL(), c.move1onexL()) [
long currenL1lme = c.geLLong(umeColumn),
lf (currenL1lme > oldesL1lme) [
oldesL1lme = currenL1lme,
}
}
reLurn oldesL1lme,
}
Implemente um
algoritmo que leia o
evento mais antigo
dentre os eventos
armazenados no
cursor.
E
c
o
m
o

in
c
o
r
p
o
r
a
r
e
s
s
e

c

d
ig
o
e
m
s
e
u

m
e
n
u
?

LvenLLlsL.[ava
Lxlblndo o LvenLo Mals Anugo
[Cverrlde
publlc boolean onCpuonslLemSelecLed(MenulLem lLem) [
swlLch (lLem.geLlLemld()) [
case MAx_MLnu_lu:
AlerLulalog.8ullder bullder = new AlerLulalog.8ullder(Lhls),
bullder.seLMessage("CldesL evenL = "
+ SLrlng.valueCf(geLCldesL(geLLvenLs()))),
AlerLulalog alerL = bullder.creaLe(),
alerL.show(),
reLurn Lrue,
defaulL:
,
}
reLurn false,
}
LvenLLlsL.[ava

Você também pode gostar