2012-08-05 67 views
3

我正在J2ME中做一個遊戲。 我想保存數據層面和RMS得分。這是我的代碼 這是類RMSData:在j2me中讀寫RMS

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

但它無法讀取數據。

+0

您是否將每個等級的得分存儲在記錄中?如果是,則表示您必須獲得存儲在記錄中的最後一個等級和分數。我對嗎? – 2012-08-06 07:37:01

回答

0

我讀的方式,我認爲,RMSData.readRecStore()的作用是:

  • 經歷的所有記錄。
  • 閱讀所有入一個字節數組一次一個
  • 丟棄所有的數據,除非它是在店內
  • 回的最後一條記錄包含最後一個記錄的字符串。

每次打電話給readRecStore時,你有可能得到相同的結果(分數)嗎?

+0

st =「Level:」+ RMSData.readRecStore()+「Score:」+ RMSData.readRecStore();將返回一個結果的水平和分數。但我不知道讀有效值返回兩個結果的水平和分數。請幫助我 – 2012-08-06 07:05:45

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; 
    }