在Java J2ME中使用RecordStore

me1*_*123 0 java rms midp java-me

我目前正在做一些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);
        }

      }
Run Code Online (Sandbox Code Playgroud)

当它到达rs.getRecordSize(i)时,我总是得到一个"javax.microedition.rms.InvalidRecordIDException:错误查找记录".我知道这是由于记录是空的,但我想不出办法解决这个问题.

任何帮助将非常感激.

提前致谢.

kgi*_*kis 6

您应该使用RecordEnumeration来访问记录:

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

    }
}
Run Code Online (Sandbox Code Playgroud)

你不能依赖recordId做任何有用的事情.使用不同的技术重新分配已删除的记录.