3

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();

ただし、データを読み取ることはできません。

4

2 に答える 2

2

その 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;
    }
于 2012-08-06T11:53:25.490 に答える
0

私がそれを読んだ方法は、RMSData.readRecStore() が行うことは次のとおりだと思います。

  • すべての記録を調べます。
  • それらすべてを一度に 1 つずつバイト配列に読み込みます
  • ストア内の最後のレコードでない限り、すべてのデータを破棄します
  • その最後のレコードを含む文字列を返します。

readRecStore を呼び出すたびに同じ結果 (スコア) が得られる可能性はありますか?

于 2012-08-05T17:50:02.673 に答える