Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java ME (J2ME) > Не работает RMS ну хоть убей


Автор: izotope 22.7.2008, 12:23
Есть код:
Код

public void setSettings(){
        RecordStore recordStore = null;
        String str = null;
        try {
           
            try {
                recordStore = RecordStore.openRecordStore("KIBStorage", true);
            }
            catch (Exception ex) {
                ex.printStackTrace();
            }
           
            if (choiceGroup1.getSelectedIndex()==0){
                str = "0";
                currentOP="Beeline";
            }
            if (choiceGroup1.getSelectedIndex()==1){
                str = "1";
                currentOP="Megafon";
            }
            if (choiceGroup1.getSelectedIndex()==2){
                str = "2";
                currentOP="MTS";
            }
           
            if (choiceGroup2.isSelected(0)){
                workMode=true;
                //frmMain.set(0, "Служебный режим", work);
                if (frmOperFiz==null) {
                    get_frmOperFiz();
                }
                frmOperFiz.set(0, "Служ. остаток", work);
            } else {
                workMode=false;
                if (frmOperFiz==null) {
                    get_frmOperFiz();
                }
                frmOperFiz.set(0, "Остаток", work);
            }
           
            if (recordStore.getNumRecords() == 0) {
                recordStore.addRecord(str.getBytes(), 0, str.length());
                if (choiceGroup2.isSelected(0)){
                    recordStore.addRecord("1".getBytes(), 0, "1".length());
                } else {
                    recordStore.addRecord("0".getBytes(), 0, "0".length());
                }
                *recordStore.addRecord(txtPass.getString().getBytes(), 0, txtPass.getString().length());
            } else {
                recordStore.setRecord(1, str.getBytes(), 0, str.length());
                if (choiceGroup2.isSelected(0)){
                    recordStore.setRecord(2, "1".getBytes(), 0, "1".length());
                } else {
                    recordStore.setRecord(2,"0".getBytes(), 0, "0".length());
                }
                if (txtPass.getString()=="") {
                    txtPass.setString("0000");
                }
                *recordStore.setRecord(3, txtPass.getString().getBytes(), 0, txtPass.getString().length());
            }
            recordStore.closeRecordStore();
        } catch (RecordStoreException ex) {
            ex.printStackTrace();
        }
    }



И вот хоть убей, но не добавляется в этот RMS запись и соответственно не записывается, не отрабатываемая строчка отмечена звездочкой.

Автор: eugine_s 22.7.2008, 13:05
Цитата(izotope @  22.7.2008,  12:23 Найти цитируемый пост)
И вот хоть убей, но не добавляется в этот RMS запись и соответственно не записывается, не отрабатываемая строчка отмечена звездочкой. 


Какая ошибка? 
Текст, который в консоль пишется приведи.

Автор: izotope 22.7.2008, 13:41
Ошибок нет, в консоли штатная информация

Автор: Dummy 22.7.2008, 14:13
Что сразу бросается в глаза:
  •  txtPass.getString().length() - в общем случае не равно количеству байт в строке - это количество символов. Чтобы брать байтовый массив целиком, нужно изменить строчку 48 на что-то типа следующего:
    Код

    byte strBytes[] = txtPass.getString().getBytes();

    recordStore.addRecord(strBytes, 0, strBytes.length);

  •  Строки в Java нельзя сравнивать с помощью операции ==, как это сделано в линии 56, если это только не строки из константного пула. Нужно использовать String.equals().
  •  setRecord() не стоит делать с фиксированными значениями id записей, как это сделано в линиях 52, 54, 59.

Автор: izotope 22.7.2008, 15:11
Цитата(Dummy @ 22.7.2008,  14:13)
[*] Строки в Java нельзя сравнивать с помощью операции ==, как это сделано в линии 56, если это только не строки из константного пула. Нужно использовать String.equals().

[*] setRecord() не стоит делать с фиксированными значениями id записей, как это сделано в линиях 52, 54, 59.
[/LIST]

Как сравнить пустое значение? с null ?

А с какими значениями нужно делать setRecord() ?

Автор: Dummy 22.7.2008, 17:08
Цитата(izotope @  22.7.2008,  15:11 Найти цитируемый пост)
Как сравнить пустое значение? с null ?

"" можно найти так:
Код

if ("".equals(txtPass.getString())) {
    ...
}


Цитата(izotope @  22.7.2008,  15:11 Найти цитируемый пост)
А с какими значениями нужно делать setRecord() ? 

Например, использовать RecordStore.enumerateRecords() с соответствующим образом определенным RecordFilter. Но это, вероятно, не самый оптимальный подход.
Можно хранить id нужных записей в отдельном RecordStore, а потом напрямую к этим записям обращаться по id.

Автор: W0LF 23.7.2008, 13:24
http://forum.vingrad.ru/index.php?showtopic=162885&view=findpost&p=1194566 я когда-то приводил готовый класс для работы с RMS

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)