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

J2ME RMS 實戰:打造手機通訊錄應用

     編輯:J2ME

RMS (Record Management System) 是 J2ME 唯一的持久化儲存機制,配合 Vector 可輕鬆實作資料存取。本文以完整的通訊錄範例,示範 RMS 的增刪查改與列表顯示。

專案結構

  • PhonesList:繼承 List,顯示通訊錄主畫面,支援新增/刪除/返回操作
  • addPhone:繼承 Form,輸入姓名與電話並寫入 RMS
  • RMSOpen:封裝 RMS 核心操作(開啟/關閉/新增/刪除/查詢全部)

核心程式碼解析

1. 通訊錄列表 PhonesList

public class PhonesList extends List implements CommandListener {
    private Phones p;
    private Command backCmd = new Command("返回", Command.BACK, 1);
    private Command addCmd = new Command("新增", Command.SCREEN, 1);
    private Command delCmd = new Command("刪除", Command.SCREEN, 1);

    public PhonesList(Phones ph) {
        super("通訊錄", List.IMPLICIT);
        this.p = ph;
        addCommand(backCmd); addCommand(addCmd); addCommand(delCmd);
        setCommandListener(this);
    }

    public void loadPhoneList() {
        Vector v = RMSOpen.getAllRMS();
        for (int i = 0; i < v.size(); i++) {
            append((String) v.elementAt(i), null);
        }
        RMSOpen.closeRMS();
    }

    private void deletePhone() {
        RMSOpen.deleteRMS(getString(getSelectedIndex()));
        RMSOpen.closeRMS();
    }

    public void commandAction(Command c, Displayable d) {
        if (c == backCmd) p.chand("Main");
        else if (c == addCmd) p.chand("addPhone");
        else if (c == delCmd) { deletePhone(); p.chand("PhonesList"); }
    }
}

2. 新增聯絡人 addPhone

public class addPhone extends Form implements CommandListener {
    private Phones P;
    private TextField tfName = new TextField("姓名:", "", 255, TextField.ANY);
    private TextField tfPhone = new TextField("電話:", "", 255, TextField.PHONENUMBER);
    private Command okCmd = new Command("確定", Command.OK, 1);
    private Command backCmd = new Command("返回", Command.BACK, 1);

    public addPhone(Phones p) {
        super("新增電話");
        this.P = p;
        append(tfName); append(tfPhone);
        addCommand(okCmd); addCommand(backCmd);
        setCommandListener(this);
    }

    public void commandAction(Command c, Displayable d) {
        if (c == backCmd) P.chand("PhonesList");
        else if (c == okCmd) {
            RMSOpen.addRMS(tfName.getString(), tfPhone.getString());
            RMSOpen.closeRMS();
            P.chand("PhonesList");
        }
    }
}

3. RMS 核心操作類 RMSOpen

public class RMSOpen {
    static RecordStore rs;

    public static void openRMS() {
        try { rs = RecordStore.openRecordStore("phonelist", true); }
        catch (Exception e) { e.printStackTrace(); }
    }

    public static void closeRMS() {
        try { rs.closeRecordStore(); }
        catch (Exception e) { e.printStackTrace(); }
    }

    // 新增記錄:格式 "姓名:電話"
    public static void addRMS(String name, String phone) {
        openRMS();
        try {
            String data = name + ":" + phone;
            rs.addRecord(data.getBytes(), 0, data.length());
        } catch (Exception e) { e.printStackTrace(); }
    }

    // 刪除指定內容的記錄
    public static void deleteRMS(String target) {
        openRMS();
        try {
            int maxId = rs.getNextRecordID();
            for (int i = 1; i < maxId; i++) {
                byte[] rec = rs.getRecord(i);
                if (new String(rec).equals(target)) {
                    rs.deleteRecord(i);
                    break;
                }
            }
        } catch (Exception e) { e.printStackTrace(); }
    }

    // 取得所有記錄
    public static Vector getAllRMS() {
        openRMS();
        Vector v = new Vector();
        try {
            RecordEnumeration re = rs.enumerateRecords(null, null, false);
            while (re.hasNextElement()) {
                v.addElement(new String(re.nextRecord()));
            }
        } catch (Exception e) { e.printStackTrace(); }
        return v;
    }
}

關鍵技術點

  • RecordStore:核心儲存類別,支援 addRecord/deleteRecord/getRecord/enumerateRecords
  • RecordEnumeration:高效遍歷記錄,避免逐筆 getRecord 的效能開銷
  • 資料格式:以 姓名:電話 字串儲存,讀取後直接顯示於 List
  • 例外處理:完整捕捉 RecordStoreException、InvalidRecordIDException 等 RMS 專屬例外

此範例展示了 J2ME 本地儲存的完整流程,可直接作為通訊錄、記事本等應用的基礎架構。

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