Использование RecordStore в Java J2ME - PullRequest
0 голосов
/ 22 марта 2010

Я сейчас занимаюсь разработкой J2ME. У меня проблема в том, что пользователь может добавлять и удалять элементы в хранилище записей, и если запись удаляется, то эта запись остается пустой, а остальные не перемещаются вверх. Я пытаюсь создать цикл, который будет проверять, есть ли в записи что-либо (если она была удалена), и если это так, то я хочу добавить содержимое этой записи в список. Мой код похож на следующее:

      for (int i = 1; i <= rs.getNumRecords(); i++)
      {
        // Re-allocate if necessary

        if (rs.getRecordSize(i) > recData.length)
          recData = new byte[rs.getRecordSize(i)];
        len = rs.getRecord(i, recData, 0);
        st = new String(recData, 0, len);
        System.out.println("Record #" + i + ": " + new String(recData, 0, len));
        System.out.println("------------------------------");
        if(st != null)
        {
            list.insert(i-1, st, null);
        }

      }

Когда он попадает в rs.getRecordSize (i), я всегда получаю «javax.microedition.rms.InvalidRecordIDException: запись поиска ошибки». Я знаю, что это связано с тем, что запись пуста, но я не могу придумать, как обойти эту проблему.

Любая помощь будет высоко ценится.

Заранее спасибо.

Ответы [ 3 ]

6 голосов
/ 22 марта 2010

Вы должны использовать RecordEnumeration, чтобы посетить записи:

RecordEnumeration renum = rs.enumerateRecords(null, null, false);
while (renum.hasNextElement())
{
    int index = renum.nextRecordId();
    if (store.getRecordSize(index) == STORE_LEN)
    {

    }
}

Вы не можете полагаться на recordId для чего-либо полезного. Используйте другой метод для перераспределения удаленной записи.

1 голос
/ 06 апреля 2010

Для того, чтобы ваши записи действительно были удалены, вы должны закрыть de RecordStore.Правильный способ работы с RecordStore - это открыть его, используя, наконец, его закрытие.Надеюсь, что это полезно для вас

0 голосов
/ 28 марта 2010

Вы можете попробовать использовать следующий метод:

 /**
 * checks if record i is a valid records
 * @param i (recordId
 * @return true/false
 */
public boolean isValidRecord(int id) {

    try {
        recordStore.getRecordSize(id);
        return true;
    } catch (RecordStoreNotOpenException e1) {
        e1.printStackTrace();
        return false;
    } catch (InvalidRecordIDException e1) {
        //e1.printStackTrace(); //this printStackTrace is hidden on purpose: the error is in fact used to find out if the record id is valid or not.
        return false;
    } catch (RecordStoreException e1) {
        e1.printStackTrace();
        return false;
    }

}
...