2011-06-06 64 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(); 
}