Para quem não acompanhou ou não quer ver como foi feito o código da agenda não se preocupe! No final do post estaremos disponibilizando todo o código fonte para dowload.
Para utilizar o Floggy precisamos adicionar em Bibliotecas & Recursos um .jar do framework Floggy e editar o build.xml do projeto. Para aprender passo a passo como fazer estes passos veja o post Configurando o Netbeans para usar Floggy.
Agora vamos ao que interessa, o Floggy!
Precisamos guardar um nome e um telefone em cada registro do Record Store, para isso vamos criar uma classe agenda que contem os atributos nome e telefone e esta classe irá implementar Persistable, assim cada objeto desta classe será armazenado em um registro no Record Store. A classe então fica a seguinte:
package hello;
import net.sourceforge.floggy.persistence.FloggyException;
import net.sourceforge.floggy.persistence.Persistable;
import net.sourceforge.floggy.persistence.PersistableManager;
public class Agenda implements Persistable {
private String nome;
private String telefone;
public Agenda(){
nome = null;
telefone = null;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getNome() {
return nome;
}
public String getTelefone() {
return telefone;
}
public void setTelefone(String telefone) {
this.telefone = telefone;
}
public void save(){
try{
PersistableManager.getInstance().save(this);
} catch (FloggyException ex) {
ex.printStackTrace();
}
}
}
O método save() será explicado logo adiante. Os demais são apenas getters e setters para pegar ou setar valores dos atributos nome e telefone.
Agora no código referente ao comando Inserir vamos fazer o seguinte:
if (command == cmdInserir) {
if(getTextFieldNome().getString().equals("")||getTextFieldTel().getString().equals("")){
getAlert().setString("Algum campo esta vazio! Preencha corretamente");
}else{
adicionarDadosAgenda();
getAlert().setString("Os dados foram inseridos com sucesso!");
getTextFieldNome().setString("");
getTextFieldTel().setString("");
}
switchDisplayable(getAlert(), getFormPrincipal());
}
Verificamos se os campos estão preenchidos corretamente e se eles estiverem chamamos o método adicionarDadosAgenda().
public void adicionarDadosAgenda(){
Agenda objetoAgenda = new Agenda();
objetoAgenda.setNome(textFieldNome.getString());
objetoAgenda.setTelefone(textFieldTel.getString());
objetoAgenda.save();
}
Cada vez que entrarmos neste método declaramos um objeto do tipo agenda. Isto é necessário, pois cada novo objeto é um registro do banco. Se instanciarmos apenas uma vez e usarmos o mesmo objeto, os dados serão sobrescritos.
Depois setamos os valores de nome e telefone com o setNome e setTelefone, em seguida apenas chamamos o método save() da classe Agenda. O código da classe Agenda esta listado acima e dentro do método save() apenas chamamos uma operação do Floggy, a save(objeto).
Esta operação salva um objeto no banco, o objeto que esta sendo passado como parâmetro é o objeto corrente da própria classe Agenda, por isso passamos o parâmetro this.
public void save(){
try{
PersistableManager.getInstance().save(this);
} catch (FloggyException ex) {
ex.printStackTrace();
}
}
Para exibir estes dados utilizamos o método listarDados():
private void listarDados() {
// O ObjectSet é uma interface que serve como um cursor para fazer iterações em um
//conjunto de objetos recuperados de uma consulta
ObjectSet os = null;
try {
//os recebe as instâncias de todos os objetos encontrados no banco, já que
//não possui nenhum filtro ou comparador para limitar os registros recuperados
os = PersistableManager.getInstance().find(Agenda.class, null, null);
//os.size() retorna o número de registros que tem no banco
for(int i=0;i < os.size();i++){
//cada objeto agenda recebe uma instância da classe Agenda que esta
//guardada nos registros do banco
Agenda objetoAgenda = (Agenda) os.get(i);
//Escreve no list o nome e telefone recuperado de cada registro do Record
//Store
getList().append(objetoAgenda.getNome() + " - " + objetoAgenda.getTelefone(), null);
}
}catch (FloggyException ex){
getList().append("Erro list record", null);
}
}
Pronto! Esta pronto nossa agenda com Floggy!
Para quem acompanhou o post J2ME: Agenda Utilizando RMS para a Persistência de Dados veja só a diferença: o Floggy evita muitas linhas de código, além de ser muito mais fácil e rápido.
Para fazer o download do projeto feito no Netbean clique aqui.
9 comentários:
Boa tarde
Gostaria de saber se ha como organizar os dados, tipo listar por orden alfabética ou por DDD (ex.)
Olá! É possível organizar os dados sim! Você pode criar um Filtro para encontrar determinados objetos ou usar um método "compare" para fazer a ordenação dos dados encontrados. No link http://www.javamovel.com/2009/06/floggy-framework-de-persistencia-de_2660.html você encontra o funcionamento destes métodos de seleção.
[]'s
E ai galera, alguem conhece esse erro?
net.sourceforge.floggy.persistence.migration.Enumeration
/home/Tiago/NetBeansProjects/agendafloggy/build.xml:99:
net.sourceforge.floggy.persistence.WeaverException: net.sourceforge.floggy.persistence.migration.Enumeration
at net.sourceforge.floggy.persistence.Weaver.execute(Weaver.java:146)
at net.sourceforge.floggy.persistence.WeaverTask.execute(WeaverTask.java:89)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
at sun.reflect.GeneratedMethodAccessor451.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
at org.apache.tools.ant.Task.perform(Task.java:348)
at org.apache.tools.ant.Target.execute(Target.java:357)
at org.apache.tools.ant.Target.performTasks(Target.java:385)
at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1337)
at org.apache.tools.ant.Project.executeTarget(Project.java:1306)
at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
at org.apache.tools.ant.Project.executeTargets(Project.java:1189)
at org.apache.tools.ant.module.bridge.impl.BridgeImpl.run(BridgeImpl.java:278)
at org.apache.tools.ant.module.run.TargetExecutor.run(TargetExecutor.java:498)
at org.netbeans.core.execution.RunClassThread.run(RunClassThread.java:151)
Caused by: javassist.NotFoundException: net.sourceforge.floggy.persistence.migration.Enumeration
at javassist.ClassPool.get(ClassPool.java:417)
at javassist.CtClassType.subtypeOf(CtClassType.java:301)
at net.sourceforge.floggy.persistence.Weaver.getClassThatImplementsPersistable(Weaver.java:732)
at net.sourceforge.floggy.persistence.Weaver.execute(Weaver.java:110)
... 16 more
FALHA NA CONSTRUÇÃO (tempo total: 0 segundos)
Abrç Tiago
Tiago, pelo visto o erro "Caused by: javassist.NotFoundException" ocorre porque os JARs do framework não estão configurados devidamente. Para isto veja o post Como configurar o Netbeans para usar Floggy
C:\Users\Deivy\Documents\NetBeansProjects\Fin\build.xml:99:
java.lang.ExceptionInInitializerError
at net.sourceforge.floggy.persistence.WeaverTask.execute(WeaverTask.java:74)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
at sun.reflect.GeneratedMethodAccessor260.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
at org.apache.tools.ant.Task.perform(Task.java:348)
at org.apache.tools.ant.Target.execute(Target.java:357)
at org.apache.tools.ant.Target.performTasks(Target.java:385)
at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1337)
at org.apache.tools.ant.Project.executeTarget(Project.java:1306)
at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
at org.apache.tools.ant.Project.executeTargets(Project.java:1189)
at org.apache.tools.ant.module.bridge.impl.BridgeImpl.run(BridgeImpl.java:278)
at org.apache.tools.ant.module.run.TargetExecutor.run(TargetExecutor.java:498)
at org.netbeans.core.execution.RunClassThread.run(RunClassThread.java:151)
Caused by: org.apache.commons.logging.LogConfigurationException: User-specified log class 'net.sourceforge.floggy.persistence.AntLog' cannot be found or is not useable.
at org.apache.commons.logging.impl.LogFactoryImpl.discoverLogImplementation(LogFactoryImpl.java:798)
at org.apache.commons.logging.impl.LogFactoryImpl.newInstance(LogFactoryImpl.java:601)
at org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:333)
at org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:307)
at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:645)
at net.sourceforge.floggy.persistence.Weaver.(Weaver.java:62)
... 16 more
primeiramente gostaria de elogiar o tutorial, foi de muita ajuda..
porem quando mando listar os dados eles não se encontram mais armazendos (isso depois de reiniciar o emulador)
se pude-se me esclarecer agradeceria
Obrigado Rafael. Realmente, quando o emulador é fechado os dados não persistem. Você chegou a testar no celular?
não não..
mas já tinha chegado a essa conclusão depois de mecher um pouco com o RMS puro..
já to desenvolvendo algumas coisinhas usando o Floggy graças a seu artigo..
obrigado por postar
Teria como disponibilizar o código da edição do registro da agenda usando floggy?
Postar um comentário