首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Java嵌入式开发Palm OS程序之五 02

Java嵌入式开发Palm OS程序之五 02

三、构建一个用于J2ME设备的通讯录

  这个例子构造一个基本的通讯录应用程序,使用它用户就可以从一个移动设备上查看联络资料。现在我只介绍从本地设备中存储的数据中读出相关的联络资料,在本文稍后的部分,你将看到如何使用J2ME网络功能从一个 Web服务器取回数据文件!用户将能查看一个地址列表和从这个列表选择一个地址。为了实现这个目标,我们要创建两个类,从用户界面逻辑中把数据存取逻辑分开的: AddressDB类封装所有的 RMS代码; AddressBookMIDLet类封装 GUI代码。AddressDB类的代码如下:

import javax.microedition.rms.*;import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.EOFException;
import java.io.IOException;
public class AddressDB {
private static RecordStore rs = null;
public AddressDB() {
try {
rs = RecordStore.openRecordStore("addressbook", true);
}
catch (RecordStoreException e) {
System.out.println(e);
e.printStackTrace();
}
}
public void addAddress(String Name, String Address) {
ByteArrayOutputStream os = new ByteArrayOutputStream();
DataOutputStream output = new DataOutputStream(os);
try {
output.writeUTF(Name + "," + Address);
}
catch (IOException e) {
System.out.println(e);
e.printStackTrace();
}
byte[] b = os.toByteArray();
try {
rs.addRecord(b, 0, b.length);
}
catch (RecordStoreException e) {
System.out.println(e);
e.printStackTrace();
}
}
public static String getName(int index) {
int counter = 1;
int commalocation = 0;
String name = null;
try {
RecordEnumeration enumRec =
rs.enumerateRecords(null, null, false);
while ((counter <= index) && (enumRec.hasNextElement())) {
String strTemp = new String(enumRec.nextRecord());
commalocation = strTemp.indexOf(',');
name = strTemp.substring(2, commalocation);
counter++;
}
}
catch (Exception e) {
System.out.println(e);
e.printStackTrace();
}
return name;
}
public static String getAddress(int index) {
int counter = 1;
int commalocation = 0;
String address = null;
try {
RecordEnumeration enumRec =
rs.enumerateRecords(null, null, false);
while ((counter <= index) && (enumRec.hasNextElement())) {
String strTemp = new String(enumRec.nextRecord());
commalocation = strTemp.indexOf(',');
address = strTemp.substring(commalocation + 1);
counter++;
}
}
catch (Exception e) {
System.out.println(e);
e.printStackTrace();
}
return address;
}
public static int recordCount() {
int count = 0;
try {
count = rs.getNumRecords();
}
catch (Exception e) {
System.out.println(e);
e.printStackTrace();
}
return count;
}
}


  AddressDB类包含好几个 public访问方法,它们都对来自外部调用者的访问隐藏记录存储的细节。AddressDB()构造程序调用 RecordStore.openRecordStore(),正如前面讨论的那样。我也创建了四个助手方法用于访问基层记录存储: recordCount()、 getAddress()、 getName()和 addAddress()。注意,在本例子中addAddress()方法只是在 name/address字段之间放了一个逗号。同样地, getAddress()和getName()从记录存储中取回 name/address字段。
返回列表