服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

java嵌入式开发之j2me--五


  midp要求平台设备提供一个机制用来储存简单的数据记录,通过正常的平台事件,比如重新启动和电池更新维护系统的完整性。 midp称一个持久数据库为
recordstore。 在我们的示例中, midlet打开并添加一条记录到 " mutualfundquotes " recordstore。
正如我们的演示程序,能添加到 recordstore中的唯一一种类型的记录是字节数组。 相同的 recordstore是一个资源,它可以通过套件共享。
根据 midp规范, 当 midlet从平台中删除后,recordstore也会被从平台中删除。



  pda简表



  palm公司是开发pda简表规范的领头人, 这个简表也是完善了 cldc,在相当长的一段时间内,它都将是 kjava类程序包的替代品。
java规范建议这个 profile至少应当提供两个核心功能片段: 一个用户界面显示工具包,适合于 "有限的尺寸和深度显示 "和一个持久数据存储器机制。
显示工具包应该是抽象窗口工具包的一个子集, 而持久机制将为应用程序、数据、配置/环境信息提供简单的数据存储。



  foundation简表



  下面三种简表不是非常常见, 这三种简表的职责都是为了完善 cdc。 personal和 rmi简表实际上是 foundation简表的扩展。
foundation简表的任务是担任一个基础简表,便于以后开发出来的提供图形用户接口、 网络等功能的简表附着在它之上。 除了用于基础简表,
foundation简表还提供完整网络的支持,不管有没有使用图形用户接口。



  personal简表



  在当前的规范需求下, personal简表提供下一代 personaljava环境。这个简表允诺,提供互联网连接性和 web保真度以及一个能够运行
java applets的 gui。



  rmi简表



  回想一下 cdc配置为共享的、固定网络连接信息设备提供最小的 java环境。 rmi简表将通过提供 java到 java的rmi来协助提供更好的网络连接性。
通过使用 j2se ( 1.2.x或更高版本的 ) rmi,这个简表将允许这些网络设备与其他系统应用程序交互操作 (这个系统不必也运行
j2me )。



  kjava类



  正如前面提到的那样, kjava类是最初提供的一个供测试用的类,在 palm设备上运行早期的 kvm和配置版本。 它们将被 pda简表代替。
kjava类扩展了 cldc并且提供一个图形用户接口、 palm数据库访问,简单集合类和一个三角法计算器。



  在代码段2中,我使用 com.sun.kjava重写了 midp fundtracker程序,让它在 palm上工作。 和前面的程序一样,这个简单的程序允许用户输入一个公基金代号并从www上的金融报价服务商那里取回报价。



  kjava应用程序被称作 spotlet。 事实上,一个应用程序可以由很多 spotlet组成,但是在任何时间只有一个 spotlet可以显示在
palm屏幕上。 在我们的例子中,我们创建一个基本 spotlet-- requestformspotlet.java,为我们的两个
spotlets子类提供用户界面。代码段 2扩展了基本的 requestformspotlet以便得到并储存一个报价。 retrievespotlet也扩展了基本
requestformspotlet并允许储存的报价被取回(见图)



  代码段2






import com.sun.kjava.*;



public final class fundspotlet extends requestformspotlet {



public static void main (string args[]) {

new fundspotlet().draw();

}



private void draw() {

initform();

settitle("fund quote requested");

}



public void pendown(int x, int y){

if (getexitbutton().pressed(x,y)){

getgraphic().playsound(graphics.sound_confirmation);

system.exit(0);

}

if (getsymfield().pressed(x,y))

getsymfield().setfocus();

if (getgetbutton().pressed(x,y)) {

quoterequested();

}

}



private void storequote (string fund, string newquote) {



int dbtype = 0x46554e44;

int dbcreator = 0x43415454;

com.sun.kjava.database quotedb;



try {

quotedb = new com.sun.kjava.database(dbtype,

dbcreator, com.sun.kjava.database.readwrite);

if (!quotedb .isopen()) {



com.sun.kjava.database.create(0, "mutualfundquotes",

dbcreator, dbtype, false);

quotedb = new com.sun.kjava.database(dbtype,

dbcreator, com.sun.kjava.database.readwrite);

}

byte[] data = (fund + "#" + newquote).getbytes();

quotedb.addrecord(data);

quotedb.close();

}

catch (exception recordexception) {

system.out.println("unable to store quote and/or use

mutual fund quote database.");

}



}



private void getanddisplayquote() {

string fundsymbol = getsymfield().gettext();

if (fundsymbol.length() > 0) {

string thequote = quoteservice.getquote(fundsymbol);

if (thequote != null) {

storequote(fundsymbol, thequote);

message(thequote);

}

else

message("no quote. check symbol");

}

}



private void quoterequested() {

message("");

getgraphic().playsound(graphics.sound_startup);

if ((getsymfield().gettext().length() > 0)) {

getanddisplayquote();

} else

{

message("symbol required!");

}

}



}








  在 requestformspotlet程序中,类似于 midp中的 display对象,单独的 graphics管理许多 spotlet用户界面显示。它考虑到了屏幕会被清除,显示边界会被建立。
不象 midlet,没有屏幕或画布对象来让我们添加用户界面小组件, 取而代之的是按钮、文本字段等等,直接描画在 spotlet上。
paint()方法利用图形环境从独一无二的 graphics在屏幕上显示小组件。



  我们的midp程序的 quoteservice类的大部分可以重新使用。 因为 kjava没有象 midp中httpconnection这样特定的连接器界面,所以我们必须利用更多标准的一般的连接器结构表单获取
http链接。 为了做到这一点,使用代码段 3中的代码替换 getquotepage()方法。注意注意使用 connector,就像在
midp中我们使用 httpconnection一样。



  代码段3






private static string getquotepage(string symbolstring) {

stringbuffer quotepage = new stringbuffer();

int ch;

try {

inputstream in = connector.openinputstream (

"testhttp://someurl/some_application?page=++&mode=fund&symbol=";+

symbolstring);

while ((ch = in.read()) > 0) {

quotepage.append((char)ch);

}

in.close();

return quotepage.tostring();

} catch (ioexception ex) {

system.out.println("exception reading quote from

  http connection");

 return null;

 }

}








  palm设备广泛利用数据库, 你的 palm中的通讯簿、备忘录和记事本应用程序都与数据库有关。 kjava程序包提供了一个非常小的
database类,不仅可以创建并保持应用程序数据,而且可以访问现有的数据库。 如果你熟悉 palm数据库,你可能会对 kjava
database类提供的功能和信息感到失望。 然而,请再次记住, kjava只是一个演示的版本。



  在我们的例子中,我们的 spotlet访问一个 palm数据库 (如果不存在的话,则创建一个新的数据库)来储存公基金报价。每个
palm数据库都必须有名字、创建者 id (一个 palm登记的唯一的标识号 ) 和一个指定到某个单独应用程序的类型号。 试图打开数据库要通过尝试创建一个带有
id信息的数据库实例来实现。 就象 midp recordstore,记录被添加进 kjava数据库,通过把一个字节数组当成记录添加到数据库中的形式。
出处 yesky

扫描关注微信公众号