Sunteți pe pagina 1din 21

Conexo Java 2006

Mini-curso Java ME
Srgio Lus Lopes Jnior
Caelum www.caelum.com.br
Neste tutorial, voc ir aprender:
- conceitos bsicos de Java ME
- a utilizar alguns componentes do MIDP para criar um orm!
- como usar comandos para receber a"#es do usurio$
Java ME
Java ME %antigamente J&ME' ( a es)era *ue rege o Java em dispositivos portteis
ou de pouca per)ormace e limitado$
Para rodar Java em um pe*ueno dispositivo, precisamos de uma con)igura"+o e
de um pro)ile$
CLDC
,onnected -imited Device ,on)iguration ( a especi)ica"+o para pe*uenos
dispositivos$ .em toda a especi)ica"+o de in)raestrutura e de como a m*uina virtual
deve agir, al(m de colocar limitantes m/nimos para *ue um dispositivo possa se
en*uadrar a*ui:
Processador de 01 ou 2& bits com no m/nimo 01M3z
0145b de mem6ria para a virtual mac7ine e biblitoecas
08&9b para o 7eap
Pouco poder de bateria
:lgum tipo de conectividade, provavelmente ;ireless, com limite de
banda %velocidade' e com instabilidade
Em outras palavras: celulares e PD:s mais simples$
<ma con)igura"+o tamb(m )ornece a :PI bsica *ue os dispositivos devem ter$
MIDP
<m pro)ile ( algo menos abrangente *ue uma con)igura"+o$ ,ada dispositivo
possui um ou mais pro)iles, *ue vai de)inir as bibliotecas =ava *ue a*uele aparel7o vai
disponibilizar$
Mobile In)ormation Device Pro)ile de)ine a cara de um dispositivo m6vel,
especi)icando bibliotecas =ava %pacotes' *ue o desenvolvedor ter acesso$
<m dispositivo de)ine suas capacidades Java atrav(s de uma con)igura"+o e um
pro)ile$ :tualmente os celulares e palms est+o vindo com ,-D, 0$0 e MIDP &$4$
Nosso ambiente
<saremos a IDE Eclipse %;;;$eclipse$org' para o desenvolvimento de nossos
programas J&ME$ > suporte a J&ME no Eclipse ( dado pelo 6timo plugin EclipseME
%;;;$eclipseme$org', *ue ser incorporado ao pro=eto eclipse )uturamente$
:l(m da IDE, usamos o ?un Java @ireless .ool9it
%7ttp:AA=ava$sun$comAproductsAs=;tool9itA', o @.5, *ue prov uma s(rie de
)erramentas necessrias ao desenvolvimento em J&ME %mais adiante iremos detal7ar
essas )erramentas' )acilitando o do;nload agrupado$
Instalao do WTK
Pegue o ar*uivo do @.5 e eBecute seu instalador$ ?iga os passos na tela e
lembre o local escol7ido para instala"+o$
Configurao do Eli!se
Camos agora con)igurar o Eclipse com o plugin EclipseME para desenvolvimento
de Midlets$ %ora da ,aelum, este=a certo de ter o Eclipse e o EclipseME = instalados'
:bra o menu J2ME e cli*ue no bot+o Browse... da se"+o WTK Root:
?elecione o diret6rio WTK2.2.
:gora selecione no menu J2ME, Device Manager:
:gora cli*ue em Import..., *ue surgir essa tela:
,licando em Dro;se, voc deve selecionar o diret6rio de instala"+o do @.5, e
clicar logo abaiBo em Refresh:
,li*ue em Finish:
,li*ue em K$
ProntoE Nosso Eclipse est con)iguradoE Camos )azer nosso 3ello @orld para
test-lo$
"ello World
C em Fi!e "# $ew "# %ro&ect e selecione J2ME Mi'!et ()ite:
,li*ue em $e*t e colo*ue o nome do Pro=eto como +e!!oWor!'$ ,li*ue em
Finish:
Camos criar nosso primeiro Midlet, uma aplica"+o J&ME *ue rodar em pe*uenos
dispositivos$ Para isso, v em Fi!e "# $ew "# ther e selecione J2ME Mi'!et:
:p6s clicar em $e*t, colo*ue o nome do pacote e o nome de nossa classe, desta
)orma:
> c6digo de nosso 3ello@orld est abaiBo$ N+o se preocupe em entend-lo
agora, apenas transcreva-o como segue$ Este eBemplo mostrar uma =anela %.eBtDoB'
com o t/tulo Hello World Midlet e o teBto Oi Mundo!
package br.com.caelum.fj55;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.TextBox;
import javax.microedition.midlet.MIDlet;
public class HelloWorld extends MIDlet
protected void start!pp"#
TextBox tbox $ new TextBox"%Hello World MIDlet%& %'i Mundo(%& )5& *#;
Display.+etDisplay"this#.set,urrent"tbox#;
-
/* Deixe esses mtodos em branco */
protected void pause!pp"#
-
protected void destroy!pp"boolean bool#
-
-
:ten"+o: se voc criar a Midlet sem usar o ;izard, voc vai precisar
manualmente adicionar a MID-et no deploFment descriptor %mani)esto e $=ad'$ Coc
n+o ter problemas para eBecut-la pelo emulador, por(m se )or )azer deploF em um
celular o =adAmani)esto precisa estar corretamente con)igurado ou voc receber um
erro, = *ue a CM n+o vai saber o *ue eBecutar e a aplica"+o ira )al7ar$
Testando nosso "ello World
Camos testar nosso Midlet no emulador *ue vem com o @.5 da ?un$ >
EclipseME prov uma )orma )cil de )azer isso$ ,li*ue com o bot+o direito na classe
+e!!oWor!'.&ava, selecione R)n ,s e depois cli*ue em Em)!ate' J2ME Mi'!et:
:parecer um emulador de celular com nossa aplica"+o$
Gepare *ue a sa/da no console do Eclipse ainda vai te trazer uma s(rie de
in)orma"#es ao t(rmino da aplica"+o, tais como *uantidade de opcodes eBecutados,
*uantas vezes o H, passou, *uantas vezes o escalonador trocou de .7reads, etc:
Running with storage root DefaultGrayPhone
Execution completed.
7183! "ytecodes executed
1! thread switches
7#$ classes in the system %including system classes&
38$3 dynamic o"'ects allocated %1$!7(8 "ytes&
gar"age collections %8(3$$ "ytes collected&
Cilo de vida de um MIDlet
<m Midlet ( bastante di)erente de aplica"#es Java comuns, iniciadas pelo )amoso
m(todo main$ Coc notou no 3ello@orld *ue um Midlet estende a classe
=avaB$microedition$midlet$MIDlet e implementa alguns m(todos especiais$
.odo Midlet roda no dispositivo m6vel gerenciado por um aplicativo especial do
dispositivo$ > dispositivo ( responsvel por instanciar seu Midlet, eBecut-lo, paus-lo
e destru/-lo$
<m Midlet tem o *ue ( c7amado de -ic!o 'e .i'a *ue ( gerenciado pelo
dispositivo$ Esse ,iclo de Cida descreve todos os estados poss/veis de um Midlet desde
o instante em *ue ( criado at( sua destrui"+o$
?+o trs estados poss/veis: Ativo, Pausado e Destrudo$ : mudan"a de estados (
)eita =ustamente com a*ueles m(todos sobrescritos da classe MIDlet$ Ce=a o diagrama
de estados do ciclo de vida de um midlet e os m(todos invocados nas mudan"as de
estado:
> dispositivo ( o responsvel por instanciar o Midlet$ Isso ( )eito sempre pelo
construtor sem argumentos$ Neste instante, o Midlet ( colocado no estado Pausado$
#n$lise do "ello World
.odo aplicativo a ser rodado no celular ( c7amado de MID-E.$ Coc escreve uma
classe e obrigatoriamente estende da classe =avaB$microedition$midlet$MIDlet e
implementa os trs m(todos vistos antes: start:pp, pause:pp e destroF:pp$
No nosso 3ello@orld, o m(todo start:pp tem duas lin7as simples$ Na primeira,
criamos um .eBtDoB, uma caiBa de teBto *ue toma a tela toda do dispositivo$ >
primeiro argumento indica o t/tulo da caiBa de teBto, o segundo o teBto inicial, o
terceiro o taman7o mBimo de caracteres permitidos e o Iltimo algumas restri"#es
poss/veis %no nosso caso, nen7uma, por isso 4'$
Na segunda lin7a, pegamos o DisplaF da nossa MIDlet e eBibimos o .eBtDoB$ >
DisplaF ( a tela de nosso dispositivo, e o obtemos c7amando o m(todo esttico
getDisplaF na classe DisplaF$
%reen
:l(m do .eBtDoB, 7 outros elementos *ue podemos usar *ue s+o eBibidos em
todo nosso DisplaF$ .odos esses elementos tm em comum o )ato de serem )il7os de
?creen$ :l(m de caiBa de teBto, temos mais trs elementos: :lert %uma mensagem de
alerta *ue logo sai da tela', -ist %eBibe uma lista de itens' e orm %para )azermos um
)ormulrio'$
Ce=a um screens7ot de um -ist, por eBemplo:
Nosso !ro&eto' !es(uisa de am!o
Nesse tutorial, vamos desenvolver um pro=eto de uma pes*uisa de campo )eita
atrav(s de um orm$ Imagine uma empresa de pes*uisa eleitoral *ue *ueira coletar
em campo dados de inten"+o de voto para as elei"#es$
Camos implementar um orm usando componentes do MIDP *ue )acilite a coleta
das in)orma"#es$
No nosso sistema, antes de e)etivamente responder em *ual candidato o
pes*uisado ir votar, temos *ue )azer algumas perguntas para )ins estat/sticos$ Por
eBemplo, *ual sua idade e *ual sua renda mensal$
)orm
: classe )orm ( a Iltima )il7a de *creen %e neta de Displaya"le' dispon/vel no
MIDP$ <m )ormulrio ( uma tela especial onde podem ser adicionados itens de diversos
tipos %atrav(s do m(todo append'$ 3 vrios itens dispon/veis %como campos de teBto
ou de data' e todos 7erdam da classe abstrata +tem$
,omo todo *creen, um )orm possui um t/tulo$ > construtor de )orm recebe o
t/tulo como parJmetro:
Form form = new Form("Pesquisa eleitoral");
E precisamos agora colocar o orm como elemento vis/vel no DisplaF, com o
c6digo *ue = vimos antes:
Display.getDisplay(this).setCurrent(form);
Perguntando a renda mensal
Para coletar o dado sobre a renda mensal, vamos utilizar uma caiBa de teBto$
:nteriormente vimos a classe .eBtDoB, um DisplaFable$ EBiste a classe .eBtield,
bastante semel7ante, em )uncionamento, ao = visto ,ext-ox, mas com a vantagem
de poder ser adicionado a um ormulrio %n+o ocupar a tela toda'$
> construtor recebe o label, o valor inicial, o taman7o mBimo e restri"#es *ue
de)inem seu comportamento$ Neste eBemplo, vamos usar uma restri"+o$
Gestri"#es s+o constantes *ue de)inem o comportamento do .eBtield$ 3 uma
constante, por eBemplo, *ue de)ine *ue s6 podemos inserir valores num(ricos no
campo$ Camos us-la:
TextField renda = new TextField("Qual sua renda mensal?""" !" TextField.NUMERIC);
:s constantes )icam todas na classe .eBtield! 7 vrias$
Por Iltimo, adicionamos o .eBtield ao orm para ser eBibido:
form.append(renda);
Perguntando a data de nasimento
Para perguntarmos a data de nascimento, vamos usar um componente do MIDP
para datas, o Dateield$ ?eu construtor recebe dois argumento: primeiro o label e
depois o modo de opera"+o$
Podemos usar trs modos de opera"+o: D:.E, .IME e D:.EK.IME, todas
constantes na classe Dateield$ No nosso caso, *ueremos coletar apenas a data, sem o
7orrio$ Camos )azer:
DateField nas#imento = new DateField("Data de nas#imento$" DateField.DATE);
form.append(nas#imento);
Perguntando o voto
Para perguntarmos o voto, vamos usar uma lista de op"#es onde se poder
selecionar apenas uma %lista eBclusiva'$ > Item *ue incorpora esse comportamento ( o
,7oiceHroup$
.rabal7ar com o ,7oiceHroup ( bastante simples$ Primeiro precisamos indicar no
construtor *ual ( o label e o modo de opera"+o$ >s modos dispon/vels s+o: EL,-<?ICE
%lista eBclusiva, uma op"+o', M<-.IP-E %mIltipla escol7a' e IMP-I,I. %muito usado em
menus'$ Note *ue as constantes est+o de)inidas na inter)ace ,7oice$
Camos usar uma lista EL,-<?ICE:
C%oi#e&roup 'oto = new C%oi#e&roup("(oto$" C%oi#e.EXCLUSIVE);
Precisamos agora adicionar os elementos nesse ,7oiceHroup, as op"#es de voto$
azemos isso com o m(todo append *ue recebe tamb(m uma imagem a ser eBibida
%vamos colocar null para n+o eBibir nen7uma imagem':
'oto.append("Candidato !" null);
'oto.append("Candidato )" null);
'oto.append("*ran#o" null);
'oto.append("+ulo" null);
Por Iltimo, precisamos adicionar o ,7oiceHroup ao )orm:
form.append('oto);
E*er+io
Camos implementar nosso pro=eto de coleta de votos usando um .eBtield, um
Dateield e um ,7oiceHroup$
0' ,rie uma MIDlet c7amada Pes*uisaEleitoral:
- C em ile -M Ne; -M >t7er
- Dentro de J&ME, selecione J2ME MID!et
- ,olo*ue o nome do pacote como /r.com.cae!)m.f&00
- ,olo*ue o nome da classe como %es1)isaE!eitora!
&' Camos implementar a classe:
- crie atributos para orm, .eBtield, Dateield e ,7oiceHroup
private Form form;
private TextField renda;
private DateField nas#imento;
private C%oi#e&roup 'oto;
- Dentro do construtor da classe, inicialize essas variveis e adicione os Items ao
)orm:
public Pesquisa,leitoral() -
.. #ria o Form
form = new Form("Pesquisa eleitoral");
.. #ria o #ampo para renda
renda = new TextField("Qual sua renda mensal?"""!"TextField.NUMERIC);
.. #ria o #ampo para data de nas#imento
nas#imento = new DateField("Data de nas#imento$" DateField.DATE);
.. #ria o #ampo para o 'oto
'oto = new C%oi#e&roup("(oto$" C%oi#e.EXCLUSIVE);
.. adi#iona op/0/1es de 'oto
'oto.append("Candidato !" null);
'oto.append("Candidato )" null);
'oto.append("*ran#o" null);
'oto.append("+ulo" null);
.. adi#iona elementos no Form
form.append(renda);
form.append(nas#imento);
form.append('oto);
2
- no m(todo start:pp, eBiba o )orm na tela:
protected void start3pp() throws 45Dlet6tateC%an7e,x#eption -
Display.getDisplay(this).setCurrent(form);
2
> c6digo )inal de sua classe deve ser:
package 8r.#om.#aelum.f9::;
import 9a'ax.mi#roedition.l#dui.;;
import 9a'ax.mi#roedition.midlet.;;
public class Pesquisa,leitoral extends 45Dlet -
private Form form;
private TextField renda;
private DateField nas#imento;
private C%oi#e&roup 'oto;
public Pesquisa,leitoral() -
.. #ria o Form
form = new Form("Pesquisa eleitoral");
.. #ria o #ampo para renda
renda = new TextField("Qual sua renda mensal?"""!"TextField.NUMERIC);
.. #ria o #ampo para data de nas#imento
nas#imento = new DateField("Data de nas#imento$" DateField.DATE);
.. #ria o #ampo para o 'oto
'oto = new C%oi#e&roup("(oto$" C%oi#e.EXCLUSIVE);
.. adi#iona op<=es de 'oto
'oto.append("Candidato !" null);
'oto.append("Candidato )" null);
'oto.append("*ran#o" null);
'oto.append("+ulo" null);
.. adi#iona elementos no Form
form.append(renda);
form.append(nas#imento);
form.append('oto);
2
protected void start3pp() throws 45Dlet6tateC%an7e,x#eption -
Display.getDisplay(this).setCurrent(form);
2
protected void destroy3pp(boolean ar7") throws 45Dlet6tateC%an7e,x#eption -
.. TODO 3uto>7enerated met%od stu8
2
protected void pause3pp() -
.. TODO 3uto>7enerated met%od stu8
2
2
2' Gode sua MIDlet e ve=a o resultado:
- ,li*ue com o bot+o direito na MIDlet e v em:
Gun :s$$$ -M Emulated J&ME MIDlet
- .este cada um dos componentes
, (ue so Comandos
:t( agora nossas aplica"#es )oram bastante inIteis, apenas mostravam
elementos na tela sem )azer nada realmente$ Para eBecutarmos a"#es em nossos
Midlets, nossa aplica"+o recebe comandos do usurio$ ,omandos s+o de)inidos pela
classe .ommand$
,omandos s+o a"#es *ue o usurio pode eBecutar na tela em *ue ele est$ ?+o
geralmente op"#es eBibidas na parte de baiBo da tela atrav(s de lin9s ou menus$
<m Midlet pode criar diversos comandos e adicion-los ao Displaya"le atual
%,ext-ox, )orm etc' $ Dependendo do dispositivo e do nImero de comandos, estes
podem ser apresentados associados N bot#es de navega"+o do aparel7o ou em um
menu$
Criando Comandos
Para criar um .ommand, usamos o Inico construtor da classe:
,ommand".trin+ label& int tipo& int prioridade#
> primeiro argumento ( o nome do comando a ser eBibido$ Este deve ser o
menor poss/vel %de pre)erncia, apenas uma palavra de a"+o'$
> tipo ( de)inido por constantes dentro da classe .ommand$ > MIDP o)erece vrios
tipos comuns de comandos %como /0 ou .12.E3'$ Esses tipos servem para instruir o
dispositivo a eBibir o comando como costuma )azer com comandos do mesmo tipo
%pode eBibir em um lugar de desta*ue, associar a uma tecla espec/)ica etc'$
>s tipos s+o constantes inteiras na classe .ommand$ ?+o eles:
-1.0:
leva o usurio N tela logicamente anterior N atual
/0:
resposta positiva N tela atual
.12.E3:
resposta negativa N tela atual
4E3P:
apresenta a=uda
*,/P:
para um processoAopera"+o em eBecu"+o
E5+,:
sair da aplica"+o
3 ainda mais duas constantes *ue n+o de)inem um tipo especial como os
anteriores:
*.REE2:
indica um comando espec/)ico da aplica"+o para a tela atual
+,E6:
indica um comando espec/)ico para um item da tela ou elemento de .hoice
No caso dos tipos espec/)icos de comandos, o dispositivo pode optar por
sobrescrever o label na 7ora da eBibi"+o por algum label padr+o$
Nota sobre tipos
Note *ue o tipo tem a Inica )inalidade de dar a possibilidade ao dispositivo de manter a
consistncia de navega"+oAeBibi"+o de comandos similares com outras aplica"#es! no
implica em ao alguma %a a"+o ser de)inida depois'$
> Iltimo argumento do construtor, prioridade, serve para indicar ao dispositivo
a importJnciaArelevJncia de cada comando$ ,omandos com prioridade igual a 0
poder+o ser destacados pelo dispositivos %*ue pode associ-los a so)t 9eFs por
eBemplo'$ ,on)orme o valor da prioridade aumenta, menos importante ( o comando %e
o dispositivo pode optar por coloc-lo em um menu, por eBemplo'$
<m ,omando ( adicionado a um ob=eto Displaya"le com o m(todo
add.ommand%.ommand&$
No nosso caso, vamos criar um comando *ue, *uando disparado, eBiba os dados
preenc7idos anteriormente no orm$ Primeiro vamos criar o ,ommand e adicion-lo ao
orm$ ?er um comando de >5:
Command o? = new Command("6al'ar" Command.OK !);
form.addCommand(o?);
?e voc implementar s6 essa modi)ica"+o, notar *ue o comando = aparece na
tela, como um comando normal de celular$
Dis!arando a-es
Mas ao clicar no comando, nada acontece$ Isso por*ue precisamos tratar os
comandos disparados$
: inter)ace .ommand3istener de)ine um ouvinte *ue captura todo comando
disparado pelo usurio$ 3 apenas um m(todo:
command!ction",ommand c& Displayable d#
Esse m(todo recebe como argumento o .ommand *ue )oi disparado e o
Displaya"le onde ele )oi disparado %um comando pode ser inserido em vrias telas,
portanto ( interessante saber *ue tela disparou o comando'$
> .ommand3istener ( adicionado ao ob=eto Displaya"le atrav(s do m(todo:
set,ommand/istener",ommand/istener cl#
N6s vamos )azer a nossa pr6pria MIDlet tratar os comandos, implementando a
inter)ace ,ommand-istener ela mesma$ Ent+o precisamos indicar ao orm *uem
tratar os comandos:
form.setCommand@istener(this);
E no m(todo command:ction )azemos apenas uns ?Fstem$out$println para eBibir
os dados marcados:
public void #ommand3#tion(Command # Displaya8le d) -
.. pe7a a renda di7itada
6ystem.out.println("Aenda$ " B renda.7et6trin7());
.. pe7a o nas#imento sele#ionado
6ystem.out.println("+as#imento$ " B nas#imento.7etDate());
.. pe7a o nome da op/0/Co sele#ionada
6ystem.out.println("(oto$ " B 'oto.7et6trin7('oto.7et6ele#ted5ndex()));
2
Note a )orma como pegamos os valores inseridos nos campos:
- no .eBtield, atrav(s do get?tring%'
- no Dateield, atrav(s do getDate%'
- no ,7oiceHroup, atrav(s do get?tring%int' *ue recebe o /ndice da op"+o *ue
*ueremos$ E para pegar a op"+o selecionada, usamos o get?electedIndeB%' no caso de
listas EL,-<?ICE
E*er+io
0' :bra sua classe Pes*uisaEleitoral$ a"a-a implementar a inter)ace
,ommand-istener:
public class Pesquisa,leitoral extends 45Dlet implements Command@istener -
.. ...
2
&' Implemente o m(todo command:ction como visto acima:
public void #ommand3#tion(Command # Displaya8le d) -
.. pe7a a renda di7itada
6ystem.out.println("Aenda$ " B renda.7et6trin7());
.. pe7a o nas#imento sele#ionado
6ystem.out.println("+as#imento$ " B nas#imento.7etDate());
.. pe7a o nome da op/0/Co sele#ionada
6ystem.out.println("(oto$ " B 'oto.7et6trin7('oto.7et6ele#ted5ndex()));
2
2' C at( o construtor da classe e adicione, no )inal do construtor, a cria"+o do
,ommand:
.. #ria o Command e #olo#a no form
Command o? = new Command("6al'ar" Command.OK !);
form.addCommand(o?);
form.setCommand@istener(this);
> c6digo )inal de sua classe deve ser agora:
package 8r.#om.#aelum.f9::;
import 9a'ax.mi#roedition.l#dui.;;
import 9a'ax.mi#roedition.midlet.;;
public class Pesquisa,leitoral extends 45Dlet implements Command@istener -
private Form form;
private TextField renda;
private DateField nas#imento;
private C%oi#e&roup 'oto;
public Pesquisa,leitoral() -
.. #ria o Form
form = new Form("Pesquisa eleitoral");
.. #ria o #ampo para renda
renda = new TextField("Qual sua renda mensal?"""!"TextField.NUMERIC);
.. #ria o #ampo para data de nas#imento
nas#imento = new DateField("Data de nas#imento$" DateField.DATE);
.. #ria o #ampo para o 'oto
'oto = new C%oi#e&roup("(oto$" C%oi#e.EXCLUSIVE);
.. adi#iona op/0/1es de 'oto
'oto.append("Candidato !" null);
'oto.append("Candidato )" null);
'oto.append("*ran#o" null);
'oto.append("+ulo" null);
.. adi#iona elementos no Form
form.append(renda);
form.append(nas#imento);
form.append('oto);
.. #ria o Command e #olo#a no form
Command o? = new Command("6al'ar" Command.OK !);
form.addCommand(o?);
form.setCommand@istener(this);
2
protected void start3pp() throws 45Dlet6tateC%an7e,x#eption -
Display.getDisplay(this).setCurrent(form);
2
public void #ommand3#tion(Command # Displaya8le d) -
.. pe7a a renda di7itada
6ystem.out.println("Aenda$ " B renda.7et6trin7());
.. pe7a o nas#imento sele#ionado
6ystem.out.println("+as#imento$ " B nas#imento.7etDate());
.. pe7a o nome da op/0/Co sele#ionada
6ystem.out.println("(oto$ " B 'oto.7et6trin7('oto.7et6ele#ted5ndex()));
2
protected void destroy3pp(boolean ar7") throws 45Dlet6tateC%an7e,x#eption -
.. TODO 3uto>7enerated met%od stu8
2
protected void pause3pp() -
.. TODO 3uto>7enerated met%od stu8
2
2
O' .este sua MIDlet$
- ,li*ue com o bot+o direito na MIDlet e v em:
Gun :s$$$ -M Emulated J&ME MIDlet
- .este cada um dos componentes
,olo*ue alguns valores e dispare o comando salvar$ >bserve no console do
Eclipse a sa/da$
#diional' e*ibir em um Te*t.o*
:o inv(s de imprimir no console, podemos eBibir os dados em um .eBtDoB$ Para
isso, mude a implementa"+o do tratador de eventos %m(todo command:ction' para
criar um .eBtDoB e eBibir as mensagens$
N+o es*ue"a *ue, como o orm est sendo eBibido, para mostrarmos o .eBtDoB,
precisamos pass-lo para o set,urrent do DisplaF$
Nosso m(todo )ica assim ent+o:
public void #ommand3#tion(Command # Displaya8le d) -
6trin7 mensa7em = "Aenda$ " B renda.7et6trin7() B "Dn"
B "+as#imento$ " B nas#imento.7etDate() B "Dn"
B "(oto$ " B 'oto.7et6trin7('oto.7et6ele#ted5ndex());
Text*ox 8ox =
new Text*ox("Dados inseridos" mensa7em mensa7em.len7t%() ");
Display.getDisplay(this).setCurrent(8ox);
2
Note *ue passamos para o construtor a ?tring mensagem com a mensagem *ue
*ueremos eBibir e colocamos o valor mBimo como sendo o taman7o da mensagem$
Gode seu MIDlet e ve=a o resultado$
#diional' omando voltar
Implemente um comando voltar no .eBtDoB *ue eBibe a mensagem$ Esse
comando, *uando disparado, deve eBibir novamente o orm$
?e dese=ar, )a"a esse comando limpar os campos do orm$
Para saber mais' omo salvar os dados
Coc pode persistir os dados no pr6prio celular usando a classe Gecord?tore$
.odo celular com =ava ME possui uma esp(cie de banco de dados bem rudimentar *ue
pode ser acessado atrav(s dessa classe$ ?+o os Gecords, ou registros$ : estrutura dos
registros ( bastante simples$ N+o 7 tipo de dados, n+o 7 como adicionar campos e
n+o 7 nen7uma )orma de pes*uisa = implementada$ ,ada registro possui um /ndice
inteiro e um arraF de bFtes$
Podemos abrir um Gecord?tore da seguinte )orma:
0ecord.tore dados $ 0ecord.tore.open0ecord.tore"1dados2& true#;
E para adicionar uma ?tring como registro:
?tring mensagem P Qalguma mensagemR!
int posicao P dados$addGecord%mensagem$getDFtes%', 4, mensagem$lengt7%''!
E, para recuperar um registro, )azemos:
bFteST arraFDeDFtes P dados$getGecord%posicao'!
:l(m disso, voc poderia *uerer enviar os dados via Internet para algum servidor
remoto %o *ue ( o mais comum'$ Isso pode ser )eito com as classes ,onnector e
3ttp,onnection$
Pes*uise sobre essas classes para saber como poder/amos salvar nossos dados$
Para saber mais' Canvas e Jogos
Em um DisplaF, al(m de poder eBibir ?creens %.eBtDoB, orm etc', podemos
eBibir tamb(m um ,anvas$ :mbos %?creen e ,anvas' s+o )il7os de DisplaFable, o *ue
realmente de)ine o *ue pode ser eBibido ou n+o em um DisplaF$
.odos os componentes do lado ?creen s+o relacionados ao uso de )ormulrios,
com componentes prontos$
J .an7as ( a classe bsica usada para eventos mais baiBo n/vel, em geral para
desen7ar ob=etos na tela, tratar eventos do teclado$ Jogos s+o os *ue mais dependem
da classe .an7as, *ue permite )azer as anima"#es e intera"#es com o usurio$
Nada impede, logicamente, *ue se usem, em uma mesma aplica"+o, ob=etos
*creen e .an7as$
> desenvolvimento de =ogos )oi t+o importante para o J&ME *ue a especi)ica"+o
MIDP &$4 acrescentou a classe Game.an7as, )il7a de .an7as$ : Game.an7as prov
grandes )acilidades para o desenvolvimento de =ogos e ser vista mais a )rente no
cap/tulo de MIDP &$4
Para saber mais' omo fa/er sem o !lugin eli!seME
Desenvolver MIDlets com o plugin eclipseME ( muito simples$ Mas se )ossemos
desenvolver na m+o, usando o console, ter/amos *ue tomar cuidado com algumas
coisas$
Primeiro na 7ora de compilar, precisamos gerar um bFtecode compat/vel com a
JCM 0$0 *ue ( o *ue a 5CM suporta$ azemos isso passando "target 2.2 para o &avac$
:l(m disso, precisamos indicar *ue o /ootc!asspath n+o s+o as classes normais do
Java e sim os =ars do cldc e do midp$
Depois da compila"+o, precisamos passar o pr(-veri)icador no nosso $class$ :
pr(-veri)ica"+o ( um processo *ue avalia se os bFtecodes da classe s+o seguros de
serem eBecutados ou n+o %se n+o acessam endere"os proibidos de mem6ria, por
eBemplo'$
Em um programa Java normal, J&?E, essa veri)ica"+o tamb(m eBiste, s6 *ue ela
( eBecutada automaticamente pela JCM no instante em *ue a classe ( carregada$ Mas
esse processo ( relativamente custoso e a 5CM dos dispositivos *ue rodam J&ME n+o
pode se dar ao luBo de gastar tempo veri)icando bFtecodes$
:ssim, ( )eita a pr(-veri)ica"+o dos bFtecodes logo ap6s a compila"+o, atrav(s de
uma )erramenta do @.5 c7amada preverif3$
Por Iltimo, precisamos empacotar nossa aplica"+o em um =ar e criar um ar*uivo
descritor de nossa aplica"+o, o )amoso =ad %parecido com o )ormato do ar*uivo de
mani)esto'$
,omo todos esses passos n+o s+o triviais, recomenda-se )ortemente o uso de
algum plugin para automatizar essas tare)as$

S-ar putea să vă placă și