0

私は現在、いくつかの J2ME 開発を行っています。ユーザーが要素をレコード ストアに追加および削除できるという問題があり、レコードが削除された場合、そのレコードは空のままになり、他のレコードは 1 つ上に移動しません。レコードに何かが含まれているかどうかを確認するループを考え出そうとしています (削除された場合)。含まれている場合は、そのレコードの内容をリストに追加します。私のコードは次のようになります。

      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: レコード検索エラー」が発生します。これはレコードが空であることが原因であることはわかっていますが、この問題を回避する方法が思いつきません。

どんな助けでも大歓迎です。

前もって感謝します。

4

3 に答える 3

6

レコードにアクセスするには、RecordEnumeration を使用する必要があります。

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

    }
}

有用なものについては、recordId に頼ることはできません。別の手法を使用して、削除されたレコードを再割り当てします。

于 2010-03-22T16:02:44.730 に答える
1

レコードを本当に削除するには、deRecordStoreを閉じる必要があります。RecordStoreを操作する正しい方法は、RecordStoreを開き、それを使用して最後に閉じることです。これがあなたに役立つことを願っています

于 2010-04-06T12:43:37.273 に答える
0

次の方法を試すことができます。

 /**
 * 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;
    }

}
于 2010-03-28T12:47:04.557 に答える