首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> J2ME

J2ME RMS 實務問題與解決方案:模擬器資料持久化、RecordEnumeration 環狀結構

     編輯:J2ME

問題一:WTK 模擬器 RMS 資料不持久化

現象:程式執行期間寫入 RecordStore 正常,關閉模擬器後資料消失,appdb 目錄下無 .db 檔案。

根因

WTK 2.5.1 預設儲存根目錄為 C:\WTK2.5.1\appdb,若專案路徑含空白或權限不足,寫入會失敗卻不拋例外。

解決步驟

  1. 開啟「開始 → Sun Java Wireless Toolkit 2.5.1 → Preferences」。
  2. 切換「Storage」分頁,將「Root Directory」改為 .\DefaultColorPhone(相對路徑指向專案 appdb/DefaultColorPhone)。
  3. 重新啟動模擬器,RMS 檔案即會正確生成於該目錄。

問題二:RecordEnumeration 環狀結構導致遍歷順序反轉

RecordEnumeration 內部為循環鏈結,hasNextElement()/nextRecord() 從「最新寫入」向「最舊」走訪,導致讀出順序與寫入順序相反。

錯誤寫法(得到逆序)

while (re.hasNextElement()) {
    vec.addElement(re.nextRecord()); // 3,2,1
}

正確寫法(使用 previousRecord 取得正序)

public Vector getRecords(RecordStore rs) {
    try {
        RecordEnumeration re = rs.enumerateRecords(null, null, false);
        int count = re.numRecords();
        if (count == 0) return null;
        Vector v = new Vector();
        re.reset(); // 移至邏輯「最舊」之前
        while (re.hasPreviousElement()) {
            v.addElement(re.previousRecord()); // 1,2,3
        }
        return v;
    } catch (RecordStoreException e) {
        e.printStackTrace(); return null;
    }
}

最佳實踐總結

  • RMS 操作務必包在 try-catch(RecordStoreException)。
  • 關閉 RecordStore 前確認 closeRecordStore(),避免檔案鎖定。
  • 大量資料考慮分頁讀取,避免一次載入導致 OOM。
  • 真機測試 RMS 容量上限(通常 30~100 KB),實作配額檢查與使用者提示。

結語

正確設定 WTK 儲存路徑並理解 RecordEnumeration 環狀遍歷特性,能消除 J2ME 本地儲存開發中最常見的兩大困擾。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved