java-me - 在 j2me 中读取和写入 RMS

标签 java-me j2mepolish rms

我正在用 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/

相关文章:

java - 如何让我的程序找到唱片店?

java - 如何防止列表字段自动刷新后显示重复数据

java-me - 如何以编程方式识别移动键盘的类型(普通或 QWERTY)?

java - 手机端口0接收短信

serialization - Java ME 对象持久化

r - 为什么 `ns` 和 `rcs` 在 R 中生成不同的预测?

java - j2me中有没有可用的API可以让我们检测金属?

java - 安装后启动midlet

java - J2ME Polish - 无法执行 J2ME Polish 任务 : java. lang.IllegalArgumentException : The property [dir. dist] 未在输入 [${dir.dist}] 中定义