我正在用J2ME做游戏。
我想将数据级别和得分保存为RMS。这是我的代码
这是RMSData类:
public class RMSData {
private static RecordStore rs = null;
static final String REC_STORE = "ReadWriteRMS";
public static void openRecStore(){
try {
rs = RecordStore.openRecordStore(REC_STORE, true);
} catch (Exception e) {}
}
public static void closeRecStore(){
try {
rs.closeRecordStore();
} catch (Exception e) {}
}
public static void deleteRecStore(){
if(RecordStore.listRecordStores()!= null){
try {
RecordStore.deleteRecordStore(REC_STORE);
} catch (Exception e) {}
}
}
public static void writeRecStore(String str){
byte[] rec = str.getBytes();
try {
rs.addRecord(rec, 0, rec.length);
} catch (Exception e) {}
}
public static String readRecStore(){
String kq =null;
try{
byte[] recData = new byte[5];
int len;
if (rs.getNumRecords()==0) return null;
for(int i = 1; i <= rs.getNumRecords(); i++){
if(rs.getRecordSize(i) > recData.length){
recData = new byte[rs.getRecordSize(i)];
}
len = rs.getRecord(i, recData, 0);
if (i==rs.getNumRecords()) kq = new String(recData, 0, len);
}
}catch (Exception e){}
return kq;
}
}
我写水平和分数到RMS:
RMSData.openRecStore();
RMSData.writeRecStore(String.valueOf(LevelPlay));
RMSData.writeRecStore(String.valueOf(Score));
RMSData.closeRecStore();
然后我读了:
RMSData.openRecStore();
String st = null;
if(RMSData.readRecStore() == null)
st = "Level : 0"+"Score : 0";
else
st = "Level : "+RMSData.readRecStore()+"Score : "+RMSData.readRecStore();
RMSData.closeRecStore();
但是它无法读取数据。
最佳答案
验证其writeRecStore方法,如果您已经保存了第一条记录,则只需要使用setRecord更新其值即可。请参阅我们在此处使用的示例:
/**
* Saves the current data.
*
*/
public static void saveConfiguration() {
// ...
RecordStore recordStore = open(CONFIG_DB);
if (recordStore != null) {
byte byteArray[] = Persistence.packConfiguration();
try {
if (recordStore.getNumRecords() == 2) {
byte roolback[] = recordStore.getRecord(CURRENT);
recordStore.setRecord(ROLLBACK, roolback, 0, roolback.length);
recordStore.setRecord(CURRENT, byteArray, 0, byteArray.length);
} else {
recordStore.addRecord(byteArray, 0, byteArray.length);
recordStore.addRecord(byteArray, 0, byteArray.length);
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
Persistence.close(recordStore);
}
/**
* Packs the data and stores memory data into a byte array and returns it.
*
* @return The array of bytes with application data packed.
*/
private static byte[] packConfiguration() {
byte byteArray[] = null;
try {
ByteArrayOutputStream bytearrayoutputstream = new ByteArrayOutputStream();
DataOutputStream dataoutputstream = new DataOutputStream(bytearrayoutputstream);
// starts packing the data into the byte array
dataoutputstream.writeBoolean(Persistence.rememberLogin);
dataoutputstream.writeBoolean(Persistence.sounds);
dataoutputstream.writeInt(Persistence.fontSize);
dataoutputstream.writeInt(Persistence.idiom);
dataoutputstream.writeUTF((Persistence.msg == null ? "" : Persistence.msg));
dataoutputstream.writeInt(Persistence.availability);
// ...
// end of packing
byteArray = bytearrayoutputstream.toByteArray();
dataoutputstream.close();
} catch (Exception ex) {
ex.printStackTrace();
}
return byteArray;
}
关于java-me - 在j2me中读取和写入RMS,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11815789/