选择显示字体大小

j2me的重要功能简介(1)

持久数据和记录管理系统( record management system,简称 rms

midp提供在移动设备上存储持久数据的支持,并且 mid简表还特意规定兼容的移动设备必须提供至少 8kb的非动态内存用于数据存储的用途,时式上,大多数的 midp java设备提供的空间比这要求多得多。这就允许一个midlet充份利用应用程序的持久数据。对于有 java 2标准版开发经验的开发者,应该注意这种数据存储能力与标准的 java有区别。j2me记录管理系统 ( rms )允许数据流被储存并且在一个记录基础上访问数据。由应用程序开发者把每个记录解析到字段水平。rms程序包内部的接口支持一个应用程序定义的基础上的比较与检索功能。

一、javax.microedition.rms程序包

通过 javax.microedition.rms包访问 j2me记录管理系统,这个包包括一个类, recordstore,和好几个有用的接口 (在下列表格中描述 ):

接口描述
recordcomparator一个接口,定义一个比较机制,比较两个记录(以一个实现定义的方式)看它们是否匹配或它们的相对排序次序是什么样的。
recordenumeration一个接口,一个双向的纪录模拟器
recordfilter一个接口,定义了一个过滤器用于检查一个记录,看其是否匹配 (基于一种应用程序定义的标准 )。
recordlistener一个监听者接口,从一个记录存储器中接受记录更改/添加/删除事件。


这些接口对于实现自定义搜索和检索功能很有用,这些接口中使用的最多的就是 recordenumeration。这个接口从 recordstore.enumeraterecords()方法调用中返回并且被用于遍历一组从记录存储器中返回的记录。它包含 nextrecord()、 previousrecord()、 numrecords()和 hasnextelement()等方法。

二、使用recordstore类访问记录存储

recordstore类是开发者开发基层 rms的接口,记录储存是在一个平台--midlet环境依赖的方式--上创建的。信息的实际的位置和存储细节应用程序开发者其实并不知道,记录存储可以使用一种简单的命名规则来访问:名称最多可以到32个unicode字符长度,区分大小写和必须在一个 midlet套件内唯一。在一个 midlet套件内的所有 midlet都有读/写一个记录存储的权限,只要它们知道正确的名称。一旦这个 midlet套件被从该设备上删除,所有与这个套件关联的记录存储也将被删除。

比如说,为了打开一个名为 testrecordset的记录存储,你可以调用 recordstore.openrecordstore()方法。这个方法使用两个参数:一个字符串,表示记录存储的名称;一个布尔值,如果为真的话,就会在纪录存储不存在时创建一个。我们使下列方法调用创建新的 testrecordset记录存储:

recordstore rs = null;

rs = recordstore.openrecordstore("testrecordset", true);


记录存储被创建好后,我们可以通过调用 recordstore.addrecord()方法来向这个记录存储添加数据。addrecord()接受三个参数:

参数描述
byte[] data一个储存在记录中的字节数据数组,通过 java.io.bytearrayoutputstream和 java.io.dataoutputstream类把数据添加到这个字节数组。
int offset进入这个记录第一个关联字节数据缓冲区的索引
int numbytes用于记录的数据缓冲区的字节数

一旦成功完成 addrecord()调用 ,这个方法就返回一个整数指定这个记录在记录存储中的标识号。 recordstore还规定另外一个数据编辑方法,包括 setrecord()和 deleterecord(),但是我在例子中不会使用它们。

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


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons