Boa noite!
Tenho o seguinte método:
public void inserir( Cliente cliente )
{
try
{
ByteArrayOutputStream bStream = new ByteArrayOutputStream();
DataOutputStream dStream = new DataOutputStream(bStream);
dStream.writeUTF(String.valueOf(cliente.getCodigo()));
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));
}
}
Tendo como saída Gravado!, mas vejo que não está armazenando
os dados. Por que isso ocorre? O que deve ser feito?
Aviso na saída: [WARN] [rms ] javacall_file_open: _wopen failed for: C:\Documents and Settings\Usuario\javame-sdk\3.0\work\0\appdb_delete_notify.dat
ByteArrayOutputStream bStream = new ByteArrayOutputStream();
DataOutputStream dStream = new DataOutputStream(bStream);
dStream.writeUTF(String.valueOf("cod 111"));
dStream.writeUTF("nome Josefina");
dStream.flush();
byte[] dados = bStream.toByteArray();
String strTest = "";
for(int i = 0; i < dados.length; i++){
strTest += (char) dados[i];
}
System.out.println(strTest);
Saída: “nome Josefina”.
Tenta isso:
Ao invés de:
dStream.writeUTF(String.valueOf(cliente.getCodigo()));
dStream.writeUTF(cliente.getNome());
utilize:
dStream.writeUTF(String.valueOf(cliente.getCodigo() + cliente.getNome()));
Sds.
Não funcionou!
Penso que o problema é este: [WARN] [rms ] javacall_file_open: _wopen failed for: C:\Documents and Settings\Usuario\javame-sdk\3.0\work\0\appdb_delete_notify.dat
, pois está relacionado a rms. Tem a ver com certificação do emulador, autenticação…
Mas como fazer isso?
- Verifique se vc esta abrindo o RecordStore corretamente e que criou ele.
- Tente criar o arquivo C:\Documents and Settings\Usuario\javame-sdk\3.0\work\0\appdb_delete_notify.dat na mão.
- Abre o JAD dele com o notepad e remove o MIDlet-Delete-Notify.
Cola a parte que vc abre e cria o RMS.
[quote=cristiano.benato]1. Verifique se vc esta abrindo o RecordStore corretamente e que criou ele.
2. Tente criar o arquivo C:\Documents and Settings\Usuario\javame-sdk\3.0\work\0\appdb_delete_notify.dat na mão.
3. Abre o JAD dele com o notepad e remove o MIDlet-Delete-Notify.
Cola a parte que vc abre e cria o RMS.[/quote]
Criei _delete.notify.dat vazio, e não teve mais erro, mas ainda não está inserindo.
O ProjetoME.jad:
MIDlet-1: Ex1,,Ex1
MIDlet-Jar-Size: 4501
MIDlet-Jar-URL: ProjetoJME.jar
MIDlet-Name: ProjetoJME
MIDlet-Vendor: Vendor
MIDlet-Version: 1.0
MicroEdition-Configuration: CLDC-1.1
MicroEdition-Profile: MIDP-2.0
Como criar o RMS?
public void test() throws IOException, RecordStoreException {
RecordStore bd = RecordStore.openRecordStore("x", true);
ByteArrayOutputStream bStream = new ByteArrayOutputStream();
DataOutputStream dStream = new DataOutputStream(bStream);
dStream.writeUTF(String.valueOf("cod 111" + "nome Josefina"));
//dStream.writeUTF("nome Josefina");
dStream.flush();
byte[] dados = bStream.toByteArray();
String strTest = "";
for (int i = 0; i < dados.length; i++) {
strTest += (char) dados[i];
}
for (int i = 0; i < 500; i++) {
bd.addRecord(dados, 0, dados.length);
}
System.out.println(bd.getNumRecords());
byte[] b = bd.getRecord(100);
System.out.println();
for(int i = 0; i < b.length; i++){
System.out.print((char) b[i]);
}
System.out.println();
}
Assim funciona. Saída:
Cara, eu estava enganado…
Tá funcionando sim, é que eu chamei o bd.getNumRecords(); antes
de dar um bd.addRecord(), por isso eu achava que não estava inserindo.
Valeu pelas dicas!