2011-06-06 38 views
3

问题删除记录: 无法使用deleteRecord()正确J2ME从RecordStore中

背景: 我有一个简单的J2ME应用程序,我添加各种串到唱片店,并试图操纵记录存储的内容。我在一个屏幕上添加记录,然后在另一个屏幕上阅读它们。我可以使用这些屏幕来回移动

问题描述详细信息: 例如,我添加了“abc”(recordID为1),“def”(id为2)和“ghi”(id为3)。 当我以rs.deleteRecord(3),rs.deleteRecord(2),rs.deleteRecord(1)的顺序删除这些记录时,一切都按照它应有的方式工作。

当我尝试任何其他命令,我得到“消息:javax.microedition.rms.InvalidRecordIDException” 此外,当我尝试这个删除后读取其他记录没有输出。

我希望能够以任意顺序删除记录。

在此先感谢

+1

II正确地阅读[文档](http://java.sun.com/javame/reference/apis/jsr118/javax/microedition/rms/RecordStore.html#deleteRecord(int)),那么这*应该*不会发生。你是否尝试过在每次'deleteRecord()'调用后枚举记录以查看剩下哪些记录(content **和** id)? – 2011-06-14 12:40:48

回答

2

我面临同样的问题。但仔细阅读api类和此方法后,我发现在解释中写有一行:“该记录从记录存储区中删除,该记录的recordId不被重用。” 因此,要更新和添加特定的数据在相同的记录编号是不可能在记录存​​储! 因此,您需要使用Record枚举技术或使用具有您要存储的必需字段的类,将其转换为ByteArray,然后将ByteArray存储在一个记录存储区中。 希望这会帮助你和其他人。

4

打开RecordStore这个名字是RS ... 然后......

RecordEnumeration re=null; 
try { 
    re = rs.enumerateRecords(null, null, true); 
} catch (RecordStoreNotOpenException ex) { 
    ex.printStackTrace(); 
} 

int rid=0; 

try { 
    while (re.hasNextElement()) { 
    rid=re.nextRecordId(); 
    try { 
     rs.deleteRecord(rid); 
    } catch (RecordStoreNotOpenException ex) { 
     ex.printStackTrace(); 
    } catch (InvalidRecordIDException ex) { 
     ex.printStackTrace(); 
    } catch (RecordStoreException ex) { 
     ex.printStackTrace(); 
    } 
    } 
} catch (InvalidRecordIDException ex) { 
    ex.printStackTrace(); 
}