开发者

Using RecordStore in Java J2ME

开发者 https://www.devze.com 2022-12-23 14:20 出处:网络
I am currently doing some J2ME development. I am having a pro开发者_运维百科blem in that a user can add and remove elements to the record store, and if a record gets deleted, then that record is left

I am currently doing some J2ME development. I am having a pro开发者_运维百科blem in that a user can add and remove elements to the record store, and if a record gets deleted, then that record is left empty and the others don't move up one. I'm trying to come up with a loop that will check if a record has anything in it (incase it has been deleted) and if it does then I want to add the contents of that record to a list. My code is similar to as follows:

      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);
        }

      }

When it gets to rs.getRecordSize(i), I always get a "javax.microedition.rms.InvalidRecordIDException: error finding record". I know this is due to the record being empty but I can't think of a way to get around this problem.

Any help would be much appreciated.

Thanks in advance.


You should use a RecordEnumeration to visit the records:

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

    }
}

You can't rely on the recordId for anything useful. Use a different technique to reallocate a deleted record.


In order to have your records truly deleted you have to close de RecordStore. The correct way to operate a RecordStore is by opening it, using it an finally closing it. Hope this is usefull to you


You could try to use the following method:

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

}
0

精彩评论

暂无评论...
验证码 换一张
取 消