Boa tarde pessoal!
Tenho a seguinte MIDlet simplificada:
public class Ex1 extends MIDlet implements CommandListener
{
//Todos atributos aqui
protected void startApp() throws MIDletStateChangeException
{
display = Display.getDisplay(this);
form = new Form("Primeiro Aplicativo JME");
tf_nome = new TextField("Nome:", "", 30, TextField.ANY);
cm_gravar = new Command("Gravar", Command.ITEM, 1);
cm_listar = new Command("Listar", Command.ITEM, 2);
form.append(tf_nome);
form.addCommand(cm_gravar);
form.addCommand(cm_listar);
form.setCommandListener(this);
display.setCurrent(form);
criarBD();
}
private void criarBD()
{
try
{
// Se 'banco' já existir abre, senão cria
bd = RecordStore.openRecordStore("banco", true);
System.out.println("Banco criado ou aberto com sucesso!!!");
}
catch( Exception e )
{
e.printStackTrace(); // exibido no console
}
}
public void commandAction(Command c, Displayable d)
{
if( c == cm_gravar )
{
if( tf_nome.getString().length() > 0 )
{
Cliente cliente = new Cliente();
cliente.setNome(tf_nome.getString());
inserir(cliente);
}
else
{
display.setCurrent(
new Alert("Por favor, preencha todos os campos", null,
null, AlertType.INFO));
}
}
else
{
Form form = new Form("Listagem");
Vector vetor = listar();
for( int i = 0; i < vetor.size(); i++ )
{
Cliente cliente = (Cliente)vetor.elementAt(i);
form.append( cliente.getNome() + "\n");
}
Command com = new Command("Voltar", Command.BACK, 1);
form.addCommand(com);
form.setCommandListener(new Ouvinte(com));
display.setCurrent(form);
}
}
public void inserir( Cliente cliente )
{
try
{
ByteArrayOutputStream bStream = new ByteArrayOutputStream();
DataOutputStream dStream = new DataOutputStream(bStream);
dStream.writeUTF(cliente.getNome());
dStream.flush();
byte[] dados = bStream.toByteArray();
bd.addRecord(dados, 0, dados.length);
bStream.close();
dStream.close();
display.setCurrent(
new Alert("Gravado!", null,
null, AlertType.INFO));
}
catch( Exception e )
{
display.setCurrent(
new Alert("Erro", null,
null, AlertType.INFO));
}
}
public Vector listar()
{
Vector vetor = new Vector();
try
{
for( int i = 1; i <= bd.getNumRecords(); i++ )
{
byte[] b = new byte[bd.getRecordSize(i)];
int comp = bd.getRecord(i, b, 0);
Cliente cliente = new Cliente();
cliente.setNome( new String(b, 0, comp) );
vetor.addElement( cliente );
}
return vetor;
}
catch( Exception e )
{
e.printStackTrace();
throw new RuntimeException(e.getMessage());
}
}
}
Este código, apesar de simplificado funciona, mas quando reinicio,
e faço uma listagem dos registros já armazenados, eles não são
retornados. Parece não haver uma persistência dos dados.
Como resolver isso?