- UID
- 872238
|
三、构建一个用于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字段。 |
|