RecordStore

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?

  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=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!