
《手持设备移动应用开发》作业习题
第1章J2ME概述
1.什么是手持移动设备?
答:本课程所谓的手持移动设备是指能随身携带的小型智能电子设备,通常硬件
系统应包含处理机、内存和输入输出设备,而软件系统应包含嵌入式操作系统、
可安装或卸载的嵌入式应用软件。
目前主要的手持移动设备有智能手机、PDA等消费类小型电子设备,也可以
包括各类便捷式嵌入式电子设备。
2.以智能手机为例的手持移动设备,目前主要有哪些智能手机手持设备操作系
统,各自支持何种开发平台?(提示:通过网络搜索查找)
答:目前主流的智能手机类手持移动设备操作系统及各自支持的开发平台有:
Microsoft公司操作系统:WindowsMobile开发平台:C#.net
Nokia公司操作系统:Symbian开发平台:SymbianC++
Google公司操作系统:Android开发平台:Java
Apple公司操作系统:IOS开发平台:Objective-C
RearchInMotion公司操作系统:BlackBerry开发平台:Java
3.简述Java三个版本的区别联系,以及本课程采用J2ME作为开发平台的原因。
答:区别:
Java的三个版本分别针对不同的领域。三个版本其基本语法完全相同,只是根据
针对的对象设备不同,API库有些差异。
联系:
J2SE包含了Java基本的核心的元素,是J2EE和J2ME的基础。J2EE是Java的高
级版本,在J2SE基础上增加了新的类库,引入了新的技术,主要用于服务器端
的程序;J2ME在J2SE基础上删减了部分内容,还引入了专门的API类库。
原因:
J2ME主要用于移动设备等小型电子设备的软件开发,本课程针对手持移动设备
开发。J2ME有专门的API类库。J2ME是手持移动设备开发目前的主流开发平台,
通用性强。
4.手持设备移动开发中与J2ME技术中Configuration、Profile对应的技术名称是
什么?
答:Configuration:CLDC(ConnectedLimitedDeviceConfiguration,连接受限设备
配置)
Profile:MIDP(MobileInformationDeviceProfile,移动信息设备配置简表)
5.J2ME体系结构中J2ME核心类库、Configuration、Profile及可选包各有什么作用?
互相间是怎样的层次关系?
答:
(1)J2ME体系结构中J2ME核心类库的作用:
包含Java运行基本的核心部分,可以适用于不同的嵌入式设备,是Java语言能够运行的核
心部分类库,也是通用的基础部分类库
Configuration作用:
这是由设备厂商根据具体设备特点实现的最小类库和虚拟机规范,是该类设备的J2ME运行
环境,但只提供了J2ME必需的包,实现设备最基本的J2ME功能,不同设备有不同的
Configuration,这是因为同类设备可以有不同型号,但同类设备之间有相同的功能,相同功
能部分就由Configuration实现,达到中求同存异的效果。需要注意的是Configuration不能单
独使用,应和Profile配合使用,这样才能实现设备完整的功能开发。
同类设备不同型号可以有不同的功能,因此,
Profile作用:
由于Configuration只提供了同类设备不同型号间的最基本的相同功能规范,而同类设备不同
型号的特有功能则由Profile规范实现。
可选包作用:
提供了功能的进一步扩展,可以增加特定设备的特定功能,比如型号改进增加的功能等等。
(2)J2ME体系结构中J2ME核心类库、Configuration、Profile及可选包互相间存在着上层类
库依存下类库的层次间依存关系,其中J2ME核心类库是基本的核心类库(即最下层的类库),
由下向上依次是Configuration、Profile及可选包。
6.什么是MIDlet?
答:在J2ME技术平台上按照MIDP规范建立的应用程序。MIDlet是应用程序管
理最基本的单元。J2ME应用程序必须继承MIDlet,然后重写三个事件函数。MIDlet
中包含有启动、停止、销毁三个函数和一个构造函数,MIDlet首先调用不带参数
的构造函数然后应用程序管理器根据当前的MIDlet的状态,决定调用启动、停
止或销毁中的某一个。
应用程序中MIDlet类包含哪些主要函数(方法)?名称是什么?各有
什么作用?
答:MIDlet应用程序中MIDlet类中必须包含:
(1)构造方法:与用户创建的MIDlet类同类,实现类的对象的创建及初始化工作,是MIDlet
类对象运行中道德自动启动的方法。
(2)startApp()方法:启动应用程序方法,在构造方法后运行完成后自动启动的方法。
(3)destroyApp():销毁应用程序方法,通常在结束程序前调用,完成程序的结束工作。
(4)pauApp():暂停应用程序方法,在程序运行中概括需要调用该方法,实现程序的暂
停运行工作。
第2章J2ME开发环境配置
1.什么是手机模拟器?
答:一种能在PC机上仿真手机软硬件环境及界面,使得手机软件的编程、调试、
运行、测试等开发过程可以在PC机的模拟环境中实现的软件系统。
2.简述WirelessToolKit的功能。
答:SunJ2MEWirelessToolKit(缩写为WTK)是Sun公司提供的无线开发工具
包,是一个包含手机实用工具、类库、文档、实例以及手机模拟器等的开发套件。
WirelessToolKit的功能是提供了四种模拟器,利用软件来代替模拟电子设备。这
样可以在程序开发成功后不用修改或者仅做简单的修改后就可以将应用程序直
接下载到手机上运行该应用程序,简化了开发过程,提高了开发效率。
3.简述WTK中四种模拟器名称及功能。
答:四种模拟器分别是:
Defaultcolorphone用于具有彩色显示屏幕的手机模拟器
Defaultgrayphone用于具有单色灰度屏幕的手机模拟器
Mediacontrolskin用于具有音频和视频控制功能的手机模拟器
Qwertydevice用于具有标准打字键盘的手机模拟器
4.请说明构建基于eclip构架J2ME编程环境所需软件及下载地址。
答:基于eclip构架J2ME编程环境所需软件:JDK1.5或以上版本、Eclip3.2
或以上、WTK2.5.2、EclipME插件及Eclip简体中文语言包。
下载地址:
JDK
WTK
Eclip
EclipMe/
Eclip简体中文语言包/babel/
5.请说明构建基于eclip构架J2ME编程环境软件安装步骤。
答:
(1)JDK的安装;
(2)WTK的安装;
(3)Eclip的安装;
(4)加载EclispeME到Eclip中;
(5)加载WTK到Eclip中;
(6)安装Eclip简体中文语言包。
6.简述构建MIDlet项目程序的步骤。
答:以Eclip3.6英文版为例:
(1)建立J2MEMideletSuite项目步骤:打开eclip点击
filenewprojectJ2MEJ2MEMideletSuite在出现的对话框中输入
ProjectnameNext在出现的对话框中完成Device和Group的选择(如果尚未
导入WTK,需在此步骤中导入WTK)Finish;
(2)建立J2MEMidlet步骤:在Eclip工作空间的“ProjectExplorer”窗
口中右击新建立项目名称,出现快捷菜单,选择菜单中“new”命令项other
J2MEJ2MEMideletNext在“J2MEMidelet”对话框的“Name”文本框中输
入Midlet的名称finish,到此完成项目程序构建默认步骤。
(3)在Eclip工作空间的“ProjectExplorer”窗口中展开J2MEMideletSuite
项目,进入src文件夹中双击打开源程序文件(后缀为.java的文件),在程序
编辑窗口中编写程序代码。
7.请写出MIDlet项目程序框架结构。
答:
(1)MIDlet项目程序框架结构必须包括有一个MIDlet主类,该类中默认包含
含构造方法及destoryApp()、pauApp()、StartApp()等3个事件处理方法。
(2)构造方法用于初始化MIDlet;destoryApp()用于终止MIDlet;pauApp()
用于暂停MIDlet;startApp()用于启动MIDlet。当设备产生相应事件时,程序
会自动调用相应处理方法。
(3)J2ME应用程序必须继承MIDlet,然后重写三个事件方法。相关的一组
MIDlet可组合在一起,称为MIDletSuite。一个或多个MIDlet可打包成一个单
独的Jar文件,形成一个MIDletSuite。每个MidletSuite中包含继承自MIDlet
的类和其他辅助的类,还包含其他的资源。
第3章高级用户界面
1.什么是高级API?什么是底层API?
答:
高级API:主要用于编写商务应用程序,能够在不同设备之间达到高度的可移植
性,高级API很少去控制程序的外观,不能访问具体的输入设备,MIDP中所有
高级API类都是Screen的子类。
底层API:能够完全控制屏幕上的元素,访问具体按键或其他输入设备,对精确
位置和图像元素进行精确控制,方便了游戏类程序的设计,但可移植性差。
2.简述Display类、DisplayAble类、屏幕类功能。
答:
(1)Display类是系统显示设备管理类,提供取得设备属性和显示方法,可以认为
是MIDP显示用户界面的系统级逻辑屏幕;
(2)Displayable类代表应用程序各自的逻辑屏幕,系统在同一时间内只能显示一
个Displayable逻辑屏幕,用户只能和这个Displayable类交互;Displayable类中
包含了Alert、Form、List、TextBox类,因此系统可以获得用户输入。
(3)本教材中屏幕类是指用来在屏幕上显示可选列表、提示信息、文本框、表单、
滚动条、命令菜单等人机交互组件;其中,可选列表(List类)、提示信息(Alert
类)、文本框(TextBox类)、表单(Form)继承自Screen类,而Screen类以继
承自Displayable类,这类对象可以直接获得屏幕并显示,且独占整个屏幕,彼
此不能同时分享屏幕显示;另外,滚动条(Ticker类)、命令菜单(Command类)
则直接从Object类继承,在继承关系层次上与Displayable类同层,因此不能直
接获得屏幕显示,而是借助Displayable类提供的方法附加到Displayable类对象
上才能显示在屏幕上。
3.试述J2ME编程的基本步骤。
略。参照第2章习题“6.简述构建MIDlet项目程序的步骤。”部分答案。
4.说明MIDlet框架结构中4个主要方法的名称和功能。
略。参照第2章习题“7.请写出MIDlet项目程序框架结构。”部分答案。
5.简述Display类与Displayable类的区别联系。
答:
(1)Display类是系统级的逻辑屏幕,Displayable类是应用程序级逻辑屏幕,
两者层次不同;
(2)一个设备只有一个系统级逻辑屏幕,可以有多个不同的应用程序级逻辑屏
幕;
(3)Display类负责管理不同应用程序逻辑屏幕,可以决定哪个应用程序逻辑屏
幕在前台的系统级屏幕上显示,并且只有一个应用程序逻辑屏幕能在前台显示,
其余应用程序逻辑屏幕可以保存在后台等待在适当时刻显示;
(4)可以形象地认为,Display类屏幕是实际可以看到的显示设备,而不同的应
用程序有各自的屏幕布局,在需要时将各自屏幕布局显示到这个设备屏幕上。
6.请简述Form类与item类型组件在编程中的关系。
答:
(1)Form类是直接从Displayable类继承来的,因此具有屏幕特性,这就意味
着会独占整个屏幕;
(2)引入Form类的好处是虽然Form自己是独占整个屏幕,但它可以作为容器,
包含Item类型的组件,以便进行屏幕布局。Form类中可以包括文本域、进度条、
选择组等的Item类型的组件;
(3)可以在同一个Form中提供多个Item类组件,但Item类组件不能包含于其
他Item类组件,并且另一个Form中的Item类组件也不能同时显示在该Form
中,如果必须在多个Form中显示同一个Item类组件,那就必须在下一个Form
显示它之前,先将该Item类组件从当前Form中删除,然后才能让该组件显示在
新的Form中。
x类与TextField类在使用和功能上有何异同?
答:TextBox是Display的子类,TextField是Form的子类。
TextBox是一个DisplayAble类,所以它的对象可以直接由Display显示,而且
TextBox会占满整个屏幕。而TextField是Item类的子类,所以TextField需
要加到Form表单中才能显示,而且不独占一个屏幕。
8.试以教材p.54~56程序为例说明事件处理过程中事件发生
者、事件监听者及事件处理者各是哪个对象或方法?
答:事件监听者是CommandListener,对应的事件处理方法是CommandAction。
事件的发生者是各个Command对象。程序中:
事件发生者:exit,tTitle,OK等3个Command对象;
事件监听者:通过form及tb这2个Displayable对象的tCommandListener()
方法添加;
事件处理者:commandAction()方法。
9.试述Eclip中导入已有项目步骤并应注意些什么。
答:第一步:将自己保存好的项目文件拷贝到电脑上,例如D:J2ME;
第二步:打开Eclip,改变工作空间路径为项目文件拷贝到电脑上的路径;
第三步:文件—导入—常规—现有项目到工作空间—下一步—选择根目录,
浏览,找到自己项目所在位置—完成;
第四步:右击已导入的项目名—属性—J2ME—ManageDevices—重载WTK。
注意:将自己保存好的项目文件保存在不包含中文的根目录下。
10.举例说明Eclip中根据源程序错误提示信息导入类库的方法。
答:点击程序代码或编辑窗口左侧边栏中红叉的地方,会出现一个下拉框,根据
错误原因在下拉框中中选择相应选项即可自动修正程序中错误。
例如程序中定义一个Form对象,但没有导入相应类库,定义Form对象的语句将
会出现红色错误提示标记,点击错误提示可以进行修正。
11.简述Eclip项目中建立自定义类的步骤。
答:在Eclip的“ProjectExplorer”窗口中打开J2MEMideletSuite项目,
在项目名称上右击,出现快捷菜单,选择“new”选项的Class子选项,出现“New
JavaClass”对话框,填写在“Name”文本框中填写自定义的类名,并可以根据
需要在该对话框中进行其他设置,完成后点击“Finish”按钮,进入代码编辑窗
口,创建自定义类的构造函数和其他方法。
12.简述Eclip项目中实现接口的步骤。
答:在Eclip的“ProjectExplorer”窗口中打开J2MEMideletSuite项目,
在项目名称上右击,出现快捷菜单,选择“new”选项的Interface子选项,出
现“NewJavaInterface”对话框,填写在“Name”文本框中填写自定义的类名,
并可以根据需要在该对话框中进行其他设置,完成后点击“Finish”按钮,进入
代码编辑窗口,创建自定义类的构造函数和其他方法。
第4章底层用户界面
1.请从继承关系说明为什么Canvas类本质上是一种屏幕类?Canvas类本身又是
各种底层用户界面类的什么类?(提示:参考WTKDocumentation)
答:(1)从继承关系来看,Canvas类继承于Displayable类,因此本质上也是一
个屏幕类。
(2)Canvas类是底层界面编程基类,是一个抽象类,编程时只能继承该类,取
得屏幕显示。
2.在实际编程中通常需要重写Canvas类什么方法?应用程序是否可以直接调用
这个方法?说明能或不能直接调用的理由。
答:在实际编程中通常需要重写Canvas类的Paint()方法;piant方法只能被
系统调用,应用程序不能直接调用该方法,而且每次调用paint()方法都需要
传递画图的画笔Graphics,如果用户想要调用paint()方法,只能通过调用repaint
()方法间接调用Paint()方法。
cs对象主要作用是什么?Graphics对象中绘制图形的常用方法有哪些?
答:Graphics对象提供在Canvas上绘图的能力,绘图可以直接显示在屏幕上,
也可以保存在内存中。Graphics对象可用于绘制直线、矩形、园、椭圆等几何
图形,而且中间还包括矩形、圆绘制图形的填充。还可以绘制文本并设置颜色,
字体、线条粗细等。
Graphics对象中绘制图形的常用方法有:
直线:voiddrawLine(intx1,inty1,intx2,inty2);
矩形:voiddrawRect(intx,inty,intwidth,intheight);
圆角矩形:voiddrawRoundRect(intx,inty,intwidth,intheight,int
arcWidth,intarcHeight);
绘制填充矩形:publicvoidfillRect(intx,inty,intwidth,intheight);
绘制填充圆角矩形:publicvoidfillRoundRect(intx,inty,intwidth,int
height,intarcWidth,intarcHeight);
绘制弧线:voiddrawArc(intx,inty,intwidth,intheight,intstart,int
angle);
绘制填充弧线:voidfillArc(intx,inty,intwidth,intheight,intstart,int
angle);
类的主要功能是什么?它能设置哪几类字符属性?
答:Font类直接从Object类继承,决定文本的字体和大小等属性。它能设置字
体,字型,字的大小。Font对象用Font类的静态方法建立,该方法如下:
publicstaticFontgetFont(intface,intstyle,intsize)
该方法的参数:
intface:表示字体,MIDP规定了3种,即_MONOSPACE(等宽体)、
_PROPORTIONAL(比例体)、_SYSTEM(系统字体)
intstyle:表示字型,STYLE_BOLD(粗体)、STYLE_ITALIC(斜体)、STYLE_PLAIN
(常规)、STYLE_UNDERLINE(下划线)
intsize:表示大小,SIZE_LARGE、SIZE_MEDIUM、SIZE_SMALL
cs对象绘制文本的方法是什么?说明其参数含义。
答:调用Graphics对象的如下方法在屏幕上绘制文本:
publicvoiddrawString(Stringstr,intx,inty,intanchor)
其中参数含义:
Stringstr:需显示的字符串
intx,inty:文字显示坐标
intanchor:文字显示的水平或垂直方向对齐方式
对象的主要功能是什么?从内存的角度来看,Image对象代表着什么样
的内存区域?
答:可以形象地认为Image对象代表“画布”(Canvas)上的图像区域。在J2ME
中,图像分成两类,一种是不可变图像,一般就是图片文件,通过Image类的静
态方法publicstaticImagecreateImage(Stringname)获得Image对象,其中参数
Stringname表示图像文件的路径及文件名;
另一种是可变图像,利用Image中的publicGraphicsgetGraphics()方法获得
Graphics对象,再通过这个Graphics对象绘图,该方法得到一个Graphics对象,
利用该对象可在内存中绘制几何图形,再利用drawImage()方法将图像显示在屏
幕上。
从内存的角度来看,Image对象代表着一块与图像数据及方法对应的内存区域。
7.请分别以代码说明如何创建不变图像对象及可变图像。
答:
(1)以下面创建不可变图像代码为例通过注释方式说明该过程:
publicclassMyCanvaxtendsCanvas{
protectedvoidpaint(Graphicsg){
try
{
//调用Image类的静态方法createImage打开图像文件“”,//并创建与该
文件对应的Image类对象image
Imageimage=Image("/");
//调用Graphics类的对象g的drawLine方法直接在屏幕上画线
ne(0,50,150,50);
//调用Graphics类的对象g的drawImage方法将image按参数要求//绘制到屏
幕上
age(image,50,50,|);
age(Image(image,20,20,40,
40,_NONE),50,50,|);
age(Image(image,20,20,40,40,_MIRROR_R
OT180),50,90,|);
}
catch(IOExceptione)
{
tackTrace();
}
}
}
(2)以下面创建可变图像代码为例通过注释方式说明该过程:
publicclassMyCanvaxtendsCanvas{
protectedvoidpaint(Graphicsg){
//调用Image类的静态方法createImage创建Image类对象image
//该image用以绘制可变图像
Imageimage=Image(th(),ght());
//调用image对象的getGraphics方法创建Graphics类对象gh
Graphicsgh=phics();
//for循环中gh对象调用drawLine方法绘制不同的直线
for(inti=0;i<=th()/15;i++)
{
ne(th()/2,ght(),i*15,0);
}
//调用paint()方法参数中的Graphics类的对象g将image对象绘//制到屏幕
上,特别要注意这里的Graphics类的对象g通过paint()
//方法传递得到的,不是调用image对象的getGraphics方法创建
//的那个Graphics类对象gh
age(image,0,0,|);
}
}
8.什么是按键事件?什么是游戏动作?什么是指针事件?
答:
(1)由键盘引发的事件,在底层用户界面开发中,我们需要自己来处理相关的
事件。在类Canvas中存在三种处理按键事件的方法,当相关的键盘按下时,调
用相对应的方法。这3种按键事件处理方法是:
protectedvoidkeyPresd(intkeyCode):处理按键按下
protectedvoidkeyRelead(intkeyCode):处理按键释放
protectedvoidkeyRepeated(intkeyCode):处理按键重复按下
以上方法的参数是键码。键盘的每个按键都有一个与之对应的键码,如:
KEY_NUM0,表示数字键0。
(2)在游戏中,对键盘有一些特殊的要求,需要用键盘来表示朝哪个方向移动,
或者用键盘来指示开火等,所以MIDP专门为游戏设计了动作按键,一个键码对
应一个游戏动作。MIDP专门为游戏设计的动作按键:UP、DOWN、RIGHT、LEFT、
FIRE、GAME_A、GAME_B、GAME_C、GAME_D等。
(3)在使用了指针设备或者触摸屏的移动设备上产生的事件叫做指针事件。相应
的事件处理方法:
protectedvoidpointerDragged(intx,inty)
protectedvoidpointerPresd(intx,inty)
protectedvoidpointerRelead(intx,inty)
9.试以代码说明如何判断一个向右的游戏动作。
publicclassMyCanvaxtendsCanvas{
privateintx=0,y=0;//将x、y坐标变量初始化为0
publicvoidkeyPresd(intkey)//按键事件处理方法
{
if(eAction(key)==)//判断是否按下向右键
{
x=x+3;//如果按向右键则x坐标值加3,即向右移动3个像素
}
t();//通过repaint()方法间接调用paint()
}
10.请问本章中的各个MyCanvas类是否是一个完整的程序?如果不是,请说明
如何扩展成一个完整的程序。
答:本章中的各个MyCanvas类例程并不是完整的程序,只是一个自定义类,还
需建立MIDlet程序框架的主类才能运行,因为继承自MIDlet类的主类是任何
J2ME程序必须有的主类,否则程序无法启动
第5章记录存储系统
1.什么是记录存储系统?什么是存储记录?两者之间有何区别与联系?
答:
(1)存储记录系统是用来将一些数据永久保存,在退出系统后下次打开系统还
能获得相应的记录是一种存储机制。
(2)存储记录是存储记录系统中的一条条单独的记录,每条存储记录都有一个
唯一的ID号;。
(3)两者关系类似于数据库与数据记录的关系,记录存储系统包含着一条条存
储记录。在所有的存储记录关闭后,存储记录系统才可以关闭。通过存储记录系
统可以对存储记录进行添加,修改,删除等操作。
2.请你写出一个程序片断,要求创建一个名为myRecordStore的记录存储系统,
当该系统不已经存在时报告异常,该系统只允许创建者访问。
答:
try{
RecordStorerecordstore=cordStore(“tel”,fal,
AUTHMODE_PRIVATE,fal);
}
catch(Exceptione)
{
alert=newAlert(“ErrorCreating”,ng(),null,
G);
eout(1000);
rent(alert);
}
3.在完成习题2的基础上为记录存储系统编程实现添加记录、获取记录、修改
记录并删除记录的程序片断。
答:
(1)添加记录:
try{ByteArrayOutputStreambs=newByteArryOutputStream();
DataOutputStreamds=newDataOutputStream(bs);
TF(str);
byte[]b=Array();
ord(b,0,);
();
();
}
catch(Exceptione){
tackTrace();
}
(2)获得记录
try{
intid=cordId();
Byteb[]=ord(id);
ByteArryInputStreambais=newByteArrayInputStream(b);
DataInpurStreamdis=newDataInputStream(bais);
F();
();
();
}
catch(Exceptione){
tackTrace();
}
(3)修改记录
try{
ByteArrayOutputStreambaos=newByteArrayOutputStream();
DataOutputStreamdos=newDataOutputStream(baos);
tring(str);
byte[]b=Array();
ord(b,0,);
();
();
}
catch(Exceptione){
tackTrace();
}
(4)删除记录
try{
Record(id);
}
catch(Exceptione){
tackTrace();
}
4.用记录枚举接口实现查询记录存储系统中是否存在下一条记录,如果存在获
取该记录数据,否则给出提示信息“记录查询完毕!”。
答:
alert=newAlert(“提示”,“记录查询完毕!”,null,);
eout(3000);
RecordEnumerationre=ateRecords(null,null,fal);
While(true){
if(tElement()==fal)
{
rent(alert);
}
Intid=cordId();
bytec[]=ord(id);
}
5.教材“5.3.3记录比较接口”这一节的程序片断中未完成字符串s1和s2比
较大小的编程,请你将带有//部分的未实现编程的代码用程序实现它。
答:
if(eto(s2)>0)
ES
if(eto(s2)==0)
LENT
if(eto(s2)<0)
S
6.记录存储系统高级操作中4个记录接口对象是什么?各有什么作用?
答:4种高级接口分别是:记录枚举接口(RecordEnemeration)、记录过滤接口(RecordFilter)、
记录比较接口(RecordComparator)、记录监听接口(RecordListener)。
记录枚举接口:可以从记录存储系统中取得符合条件的多个记录,并在这些记录
中前后浏览,以便对某条记录操作;
记录过滤接口:可以用来过滤出符合条件的数据记录;
记录比较接口:对数据记录排序进行比较;
记录监听接口:用于监听记录数据增加、删除和改变事件的发生
7.请说明为何在增加或修改记录时需要借助DataOutputStream、
ByteArrayOutputStream对象,而在获取记录时需要借助DataInputStream、
ByteArrayInputStream对象。
答:
(1)在J2ME的记录存储系统中数据只能以字节数组类型(byte[])保存,但在
实际应用中记录类型有多种,如字符型、字符串型、整型、浮点型、逻辑型等。
以增加记录为例,方法是publicintaddRecord(byte[]data,intofft,int
numBytes),从该方法的第1个参数可以看出添加的记录类型必须是byte[],这
就要求在使用添加记录方法addRecord()前首先将其他数据类型转换为byte[]型
数据,然后才能使用这个方法。这时需要DataOutputStream、
ByteArrayOutputStream两个类的对象配合完成这个工作。转换过程的代码片断如
下:
DataOutputStream、ByteArrayOutputStream这两个类配合可以完成将数据转换
为字节型数据的工作,方法如下:
//首先创建一个ByteArrayOutputStream对象,这个对象可以将得到的数据转换
化字节数组型数据输出
ByteArrayOutputStreambs=newByteArrayOutputStream();
//将ByteArrayOutputStream对象作为参数,创建与这个对象关联的
DataOutputStream对象,DataOutputStream对象提供了将各种基本JAVA数据
类型转换为数据输出流的方法
DataOutputStreamds=newDataOutputStream(bs);
//调用DataOutputStream对象的方法writeInt()将int型数据转换为数据输出流,
以便传递给ByteArrayOutputStream对象;
nt();
();
//将ByteArrayOutputStream对象中的字节数组数据取出存入字节数组b中
byte[]b=Array();
(2)同样在获取记录时,直接从记录存储系统中得到的数据是字节数组类型,
需要根据实际应用需要转换成相应的其他数据类型,这个转换过程需要
DataInputStream、ByteArrayInputStream这两个类的对象配合完成这个工作。
转换过程的代码片断如下:
//从记录存储系统中取得字节数组型数据存入b中
byteb[]=ord(id);
//创建与b关联的ByteArrayInputStream型对象bais
ByteArrayInputStreambais=newByteArrayInputStream(b);
//建立与bais关联的DataInputStream对象dis
DataInputStreamdis=newDataInputStream(bais);
//调用DataInputStream对象的readUTF()将得到的数据转换成UTF格式字符串;
F();
//t();将得到的数据转换成int型数据
();
第6章通用连接框架
1.什么是通用连接框架?
答:CLDC设备的网络连接方式和IO接口标准繁多,无法象PC机那样定义通用
的标准类库,因此CLDC设备只定义了通用连接框架,实际上就是只规定网络等
IO连接的方式,没有规定具体的标准类库,也就意味着没有规定嵌入式设备必
须实现哪些标准的IO连接方式,只是规定了最基本的IO连接方式,如必须支持
HTTP协议,而象Socket则不是必须具有的。所以所谓的框架也可以认为是一个
“大概”的规定。
2.简述网络连接的一般过程。
答:(1)建立连接,设置传输方式;
(2)打开输入输出流,发送或接收数据;
(3)关闭连接。
3.什么是URL?
答:统一资源定位符(URL,英语UniformResourceLocator的缩写)也被称为网
页地址,是因特网上标准的资源地址。它最初是由蒂姆·伯纳斯-李发明用来作
为万维网的地址的。现在它已经被万维网联盟编制为因特网标准RFC1738了。
URL的一般格式为(带方括号[]的为可选项):
protocol://hostname[:port]/path/[;parameters][?query]#fragment
例如:
:80/WebApplication1/?name=tom&age=2
0#resume
4.举例说明如何编程实现打开连接读取数据。
答:实现打开连接读取数据的程序片断如下:
Stringurl=;//定义需要打开的URL地址
//创建并打开连接对象,强制转换为相应的连接对象类型
ContentConnectionconnection=(ContentConnection)(url)
//创建并打开相应连接对象的输入数据流
InputStream_istm=putStream();
//取得连接对象中数据流的长度
intlen=(int)gth();
if(len!=-1)//如果输入数据流长度不为空
{
byte[]data=newbyte[len];//按输入数据流长度创建字节数组
(data);//从输入数据流中读取数据到字节数组中
}
();//关闭输入数据流
();//关闭连接对象
5.通用连接框架支持哪些常见的接口?
答:通用连接框架支持哪些常见的接口:Connection接口、InputConnection接口、
OutputConnection接口、StreamConnection接口、ContentConnection接口、
StreamConnectionNotified接口、DatarramConnection接口等。
6.为什么在网络连接编程中要采用多线程技术?
答:网络连接是有可能堵塞的操作,为了高效运行程序,有必要引入多线程设计。
J2ME仍然采用继承Thread类实现线程类,或实现Runnable接口来实现线程操作,
调用Thread中的start()方法启动线程。
本文发布于:2023-03-11 11:21:17,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/zhishi/a/16785048778071.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:MIDP.doc
本文 PDF 下载地址:MIDP.pdf
| 留言与评论(共有 0 条评论) |