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

10-09 05:39