1、手持移动设备应用开发测验参考完整答案手持设备移动应用开发习题第1章 J2ME简介1. 什么是手持移动设备? 答:本课程所谓的手持移动设备是指能随身携带的小型智能电子设备,通常硬件系统应包含处理机、内存和输入输出设备,而软件系统应包含嵌入式操作系统、可安装或卸载 的嵌入式应用软件。目前主要的手持移动设备有智能手机、PDA等消费类小型电子设备,也可以包括各类便捷式嵌入式电子设备。2. 以智能手机为例的手持移动设备,目前主要有哪些智能手机手持设备操作系统,各自支持何种开发平台?(提示:通过网络搜索查找) 答: 微软公司 操作系统:Windows Mobile 开发平台:C# .net Nokia公司
2、 操作系统:Symbian 开发平台:Symbian C+ Google公司 操作系统:Android 开发平台:Java Apple公司 操作系统:IOS 开发平台:Objective-C Research In Motion公司 操作系统:BlackBerry 开发平台:Java3. 简述Java三个版本的区别联系,以及本课程采用J2ME作为开发平台的原因。答:区别:Java的三个版本分别针对不同的领域。三个版本其基本语法完全相同,只是根据针对的对象设备不同,API库有些差异。联系:J2SE包含了Java基本的核心的元素,是J2EE和J2ME的基础。J2EE是Java 的高级版本,在J2S
3、E基础上增加了新的类库,引入了新的技术,主要用于服务器端的程序;J2ME在J2SE基础上删减了部分内容,还引入了专门的API类库。 原因:J2ME主要用于移动设备等小型电子设备的软件开发,本课程针对手持移动设备开发。J2ME有专门的API类库。J2ME是手持移动设备开发目前的主流开发平台,通用性强。4. 手持设备移动开发中与J2ME技术中Configuration、Profile对应的技术名称是什么?答:Configuration:CLDC(Connected Limited Device Configuration,连接受限设备配置) Profile:MIDP(Mobile Informat
4、ion Device Profile,移动信息设备配置简表)5. 什么是MIDlet?答:在J2ME技术平台上按照MIDP规范建立的应用程序。MIDlet是应用程序管理最基本的单元。J2ME应用程序必须继承MIDlet,然后重写三个事件函数。MIDlet中包含有启动、停止、销毁三个函数和一个构造函数,MIDlet首先调用不带参数的构造函数然后应用程序管理器根据当前的MIDlet的状态,决定调用启动、停止或销毁中的某一个。【教材习题】p.11一、选择题:2、3、4、5二、思考题:3第2章 J2ME开发环境1. 什么是手机模拟器?答:一种能在PC机上仿真手机软硬件环境及界面,使得手机软件的编程、调
5、试、运行、测试等开发过程可以在PC机的模拟环境中实现的软件系统。2. 简述Wireless ToolKit的功能。答:Sun J2ME Wireless ToolKit (缩写为WTK) 是Sun公司提供的无线开发工具包,是一个包含手机实用工具、类库、文档、实例以及手机模拟器等的开发套件。WirelessToolKit的功能是提供了四种模拟器,利用软件来代替模拟电子设备。这样可以在程序开发成功后不用修改或者仅做简单的修改后就可以将应用程序直接下载到手机上运行该应用程序,简化了开发过程,提高了开发效率。3. 简述WTK中四种模拟器名称及功能。答:四种模拟器分别是: Defaultcolorpho
6、ne 用于具有彩色显示屏幕的手机模拟器 Defaultgrayphone 用于具有单色灰度屏幕的手机模拟器 Mediacontrolskin 用于具有音频和视频控制功能的手机模拟器 Qwertydevice 用于具有标准打字键盘的手机模拟器4. 请说明构建基于eclipse构架J2ME编程环境软件安装步骤。答:(1) JDK的安装;(2)WTK的安装;(3)Eclipse的安装;(4)加载EclispeME到Eclipse中;(5)加载WTK到Eclipse中;(6)安装Eclipse简体中文语言包。5. 请说明MIDlet程序结构及主要方法功能。答:(1)MIDlet项目程序框架结构必须包括
7、有一个MIDlet主 类,该类中默认包含构造方法及destoryApp()、pauseApp()、StartApp()等3个事件处理方法。(2)构造方法用于初始化MIDlet;destoryApp()用于终止MIDlet;pauseApp()用于暂停MIDlet;startApp()用于启动MIDlet。当设备产生相应事件时,程序会自动调用相应处理方法。(3)J2ME应用程序必须继承MIDlet,然后重写三个事件方法。相关的一组MIDlet可组合在一起,称为MIDlet Suite。一个或多个MIDlet可打包成一个单独的Jar文件,形成一个MIDlet Suite。每个Midlet Suit
8、e 中包含继承自MIDlet的类和其他辅助的类,还包含其他的资源。【教材习题】p.2930一、选择题:3、4、5二、思考题:1、3第3章 CLDC和MIDP API简介1. 简述CLDC特点。答:(1)CLDC:Connected Limited Device Configuration(即有限连接设备配置),只定义了支持最基本的功能和虚拟机规范的KVM的核心类库。(2)CLDC运行在存储器大小、处理能力和显示能力都受限制的移动信息设备上。主要针对小型设备,如手机、PDA等(3)在CLDC中Java标准版的一些功能不被支持。2. 简述MIDP功能。答:MIDP(Mobile Informati
9、on Device Profile,即移动信息设备简表),针对移动电话等,提供了用户界面、网络连接、局部数据存储等增强的功能。【教材习题】p.42一、选择题:4二、思考题:2第4章 J2ME的用户界面编程1. 简述高层用户界面及底层用户界面的特点?答:用户界面设计分成两大类:高层用户界面和低层用户界面。(1)高层用户界面(抽象描述)高层用户界面是通过高层API类库实现,这类API使用抽象的方法描述用户界面,界面的具体细节依靠不同厂商提供的MIDP实现,因此在界面实现细节上可以不一致,优点是能够在不同设备之间达到高度的可移植性,使用户界面可以适应不同的硬件设备。MIDP中所有高级API类都是Sc
10、reen的子类。(2)底层用户界面(运行感知)底层用户界面是通过底层API类库实现,这类API在运行时可以感知移动信息设备中如显示屏、输入设备等硬件配置,依据硬件配置情况来实现用户界面,可以更精确控制硬件和更好地发挥硬件性能,缺点是可移植性差,不同的硬件配置需要不同的程序与之对应。2. 简述Display类、DisplayAble类、Screen类功能。答:(1)Display类是系统显示设备管理类,提供取得设备属性和显示方法,可以认为是MIDP显示用户界面的系统级逻辑屏幕;(2) Displayable类代表应用程序各自的逻辑屏幕,系统在同一时间内只能显示一个Displayable逻辑屏幕,
11、用户只能和这个Displayable类交互; (3) Screen类是继承自Displayable类的屏幕显示类,这类对象可以直接在系统屏幕中获得显示,且独占整个屏幕,彼此不能同时分享屏幕显示。可选列表(List类)、提示信息(Alert类)、文本框(TextBox类)、表单(Form)直接继承自Screen类。3. 简述Display类与Displayable类的区别联系。答:(1)Display类是系统级的逻辑屏幕, Displayable类是应用程序级逻辑屏幕,两者层次不同;(2)一个设备只有一个系统级逻辑屏幕,可以有多个不同的应用程序级逻辑屏幕;(3)Display类负责管理不同应用程
12、序逻辑屏幕,可以决定哪个应用程序逻辑屏幕在前台的系统级屏幕上显示,并且只有一个应用程序逻辑屏幕能在前台显示,其余应用程序逻辑屏幕可以保存在后台等待在适当时刻显示;(4)可以形象地认为,Display类屏幕是实际可以看到的显示设备,而不同的应用程序有各自的屏幕布局,在需要时将各自屏幕布局显示到这个设备屏幕上。4. 简述Command类主要功能。答:在MIDP中,Command类代表屏幕菜单命令项,当用户按下一个按钮时,MIDlet可以响应用户的动作。在Sun的J2ME WTK模拟器中,命令按钮被称为soft button(软键),专门用来提供屏幕菜单命令项,但并不负责执行命令,执行菜单命令须依赖
13、于对应的命令事件处理方法。5. 结合Command类使用过程说明事件处理过程中事件发生者、事件监听者及事件处理者各是哪个对象或方法?答:事件发出者:菜单命令对象Command发出事件事件监听者:菜单命令监听接口CommandListener事件处理者:菜单命令处理方法 commandAction()6. 试说明setCommandListener()方法主要作用。答:在事件处理过程中,为了让监听者与它所监听的对象挂钩,需要通过所谓监听注册的方式将两者联系起来,setCommandListener()方法可以监听Command对象发出的事件,这个方法隶属于Dsipayable类,List、Ale
14、rt、TextBox、Form等 Displayable类型的对象均可调用该方法,建立与监听事件的联系,指定监听什么类型的事件。7. TextBox类与TextField类在使用和功能上有何异同?答:TextBox是Display的子类,TextField是Form的子类。TextBox是一个DisplayAble类,所以它的对象可以直接由Display显示,而且TextBox会占满整个屏幕。而TextField是Item类的子类,所以TextField需要加到Form表单中才能显示,而且不独占一个屏幕。8. 什么是Alert类?答:(1)Alert类用于在屏幕上显示信息并可以等待一定的处理时
15、间的逻辑屏幕,可以等待无限长时间的称为模态和反之称为非模态。(2)Alert类是Displayable类的派生类,属于逻辑屏幕类,可以通过取得系统屏幕Display对象获得显示屏,并且独占屏幕,不能与其他Displayable对象同时出现在一个系统屏幕上。9. 什么是List类?答:(1)List类是可以提供具有并列关系的多项内容供用户选择的逻辑屏幕。 (2)List类是Displayable类的派生类,属于逻辑屏幕类,可以通过取得系统屏幕Display对象获得显示屏,并且独占屏幕,不能与其他Displayable对象同时出现在一个系统屏幕上。10. 请简述Form类与item类型组件在编程中
16、的关系。答:(1)Form类是直接从Displayable类继承来的,因此具有屏幕特性,这就意味着会独占整个屏幕;(2)引入Form类的好处是虽然Form自己是独占整个屏幕,但它可以作为容器,包含Item类型的组件,以便进行屏幕布局。Form类中可以包括文本域、进度条、选择组等的Item类型的组件;(3)可以在同一个Form中提供多个Item类组件,但Item类组件不能包含于其他 Item类组件,并且另一个Form中的Item类组件也不能同时显示在该Form中,如果必须在多个Form中显示同一个Item类组件,那就必须在下一个Form显示它之前,先将该Item类组件从当前Form中删除,然后才
17、能让该组件显示在新的Form中。11. 什么是Gauge类?答:Gauge是一种可以图形化地表示数值范围大小的进度条,可以通过直观的图形来显示或修改一个变量的大小值,最小值是0,最大值由程序员设置。可以分为交互和非交互两种类型。12.简述 ItemStateListener接口功能。答:(1)ItemStateListener接口可以接收Form中Item类型组件状态改变产生的事件,因此可以用这个接口来校验用户的输入动作。(2)当窗体中某个部件的状态发生了改变,窗体的ItemStateListener的itemStateChanged方法就将被调用。系统将发生改变的部件的值传递给itemSta
18、teChanged方法,在itemStateChanged方法中就可以对部件发生的变化进行响应。13.简述DateField类的功能。答:(1)DateField类可以在屏幕上显示日期和时间(2)DateField类是从Item派生出来的,可以放置在窗体中。14.简述Timer类和TimerTask类功能。答:(1)Timer类对象的主要功能是作为定时器,而由Timer类对象定时执行的任务由TimerTask类对象定义。(2)使用Timer对象的schedule方法可以调度TimerTask任务。【教材习题】p.85一、选择题:6【程序设计】1. 掌握教材p.51 TickerEample类程
19、序。2. 掌握教材p.54 Commander类程序。3. 掌握教材p.5960 TwoAlerts类程序。4. 掌握教材p.5960 Gauge1类程序。5. 掌握教材p.74程序片断功能。6. 掌握教材p.7981星空模拟程序。第5章 J2ME数据库编程1. 什么是RMS? 答:(1)在J2ME中定义了一个简单的基于记录的数据记录管理系统(Record Management System,RMS)。(2)RMS不同于在PC机或者是服务器上运行的数据库管理系统,RMS仅提供最基本的数据管理功能 。(3) 记录存储机制是由RecordStore类实现。2. 什么是记录?答:(1)在Record
20、 Store中存储的每一条数据称为记录(record)。(2)在RMS中每一条记录的数据都存放在一个byte数组中,每一条记录由惟一的recordId来标识。(3)在RMS中,可以在一个打开的Record Store中添加、删除、检索和修改记录。3. RMS如何监听记录变化?答:RMS使用记录监听接口RecordListener来监视记录的变化。当一个Record Store中的记录发生变化时,RecordListener就会被触发执行相应的事件处理方法。使用下面的事件处理函数来响应相应的事件:void recordAdded()void recordChanged()void recordD
21、eleted() 6. 记录存储系统高级操作中4个记录接口对象是什么?各有什么作用?答:4种高级接口分别是:记录枚举接口(RecordEnemeration)、记录过滤接口(RecordFilter)、记录比较接口(RecordComparator)、记录监听接口(RecordListener)。记录枚举接口:可以从记录存储系统中取得符合条件的多个记录,并在这些记录中前后浏览,以便对某条记录操作;记录过滤接口:可以用来过滤出符合条件的数据记录;记录比较接口:对数据记录排序进行比较;记录监听接口:用于监听记录数据增加、删除和改变事件的发生7. 请说明为何在增加或修改记录时需要借助DataOutp
22、utStream、ByteArrayOutputStream对象,而在获取记录时需要借助DataInputStream、ByteArrayInputStream对象。答:(1)在J2ME的记录存储系统中数据只能以字节数组类型(byte )保存,但在实际应用中记录类型有多种,如字符型、字符串型、整型、浮点型、逻辑型等。以增加记录为例,方法是public int addRecord( byte data, int offset, int numBytes ),从该方法的第1个参数可以看出添加的记录类型必须是byte,这就要求在使用添加记录方法addRecord()前首先将其他数据类型转换为byte
23、型数据,然后才能使用这个方法。这时需要DataOutputStream、ByteArrayOutputStream两个类的对象配合完成这个工作。转换过程的代码片断如下:DataOutputStream、 ByteArrayOutputStream这两个类配合可以完成将数据转换为字节型数据的工作,方法如下: /首先创建一个ByteArrayOutputStream 对象,这个对象可以将得到的数据转换化字节数组型数据输出 ByteArrayOutputStream bs=new ByteArrayOutputStream ();/将ByteArrayOutputStream 对象作为参数,创建与这
24、个对象关联的DataOutputStream 对象, DataOutputStream 对象提供了将各种基本JAVA数据类型转换为数据输出流的方法 DataOutputStream ds=new DataOutputStream( bs );/调用DataOutputStream 对象的方法writeInt()将int型 数据转换为数据输出流,以便传递给ByteArrayOutputStream 对象;ds.writeInt();ds.close();/将ByteArrayOutputStream 对象中的字节数组数据取出存入字节数组 b中 byte b=bs.toByteArray();(2
25、)同样在获取记录时,直接从记录存储系统中得到的数据是字节数组类型,需要根据实际应用需要转换成相应的其他数据类型,这个转换过程需要DataInputStream 、 ByteArrayInputStream这两个类的对象配合完成这个工作 。转换过程的代码片断如下:/ 从记录存储系统中取得字节数组型数据存入b中 byte b =rs.getRecord(id);/创建与b关联的ByteArrayInputStream 型对象baisByteArrayInputStream bais=new ByteArrayInputStream(b);/建立与bais关联的DataInputStream 对象d
26、isDataInputStream dis=new DataInputStream (bais);/调用DataInputStream 对象的 readUTF()将得到的数据转换成UTF格式字符串; dis.readUTF(); /dis.readInt( );将得到的数据转换成int型数据 dis.close( );【教材习题】p.119120一、选择题:1、2、3、4、6二、思考题:6【程序设计】1. 掌握教材p.87 RecordStoreTest类程序。2. 掌握教材p.90 RecordAdd类程序。3. 掌握教材p.91 RecordDel类程序。4. 掌握教材p.9294 Tes
27、tRecord类程序。5. 掌握教材p.9597 RecordListenerExample类程序。第6章 J2ME网络编程1. javax.microedition.io包在网络编程中有什么作用?答:(1)javax.microedition.io包的目的是实现通用的网络通信和本地I/O 。(2)javax.microedition.io里包含了一个类、9个接口和一个异常2. 简述Connection接口功能。答:Connection接口提供了网络连接的功能,这是一个通用接口类型,只定义了close方法,没有定义open方法,因为打开接口使用Connector.open() 方法。3. 举例
28、说明如何编程实现打开连接读取数据。答:实现打开连接读取数据的程序片断如下: String url=”;” /定义需要打开的URL地址 /创建并打开连接对象,强制转换为相应的连接对象类型ContentConnection connection=(ContentConnection) Connector.open(url)/创建并打开相应连接对象的输入数据流InputStream_istm=connection.openInputStream();/取得连接对象中数据流的长度int len=(int)connection.getLength();if(len!=-1) /如果输入数据流长度不为空
29、bytedata=new bytelen; /按输入数据流长度创建字节数组 istm.read(data); /从输入数据流中读取数据到字节数组中istm.close(); /关闭输入数据流connection.close();/关闭连接对象5. Connection支持哪些常见的子接口?答:InputConnection接口、OutputConnection接口、StreamConnection接口、ContentConnection接口、StreamConnectionNotified接口、DatarramConnection接口等。6. 为什么在网络连接编程中要采用多线程技术?答:网络连
30、接是有可能堵塞的操作,为了高效运行程序,有必要引入多线程设计。J2ME仍然采用继承Thread类实现线程类,或实现Runnable接口来实现线程操作,调用Thread中的start()方法启动线程操作的方法run()。【程序设计】1. 掌握教材p.123124 GetURLContent类程序。第9章 J2ME的低级用户界面设计1. 可以在一个MIDlet中同时使用高级用户界面API和低级用户界面API吗?答:可以在一个MIDlet交互使用高级用户界面API和低级用户界面API,但是不能同时使用两种类型的API。2. 请从继承关系说明为什么Canvas类本质上是一种屏幕类?Canvas类本身又
31、是各种底层用户界面类的什么类?(提示:参考WTK Documentation)答:(1)从继承关系来看,Canvas类继承于Displayable类,因此本质上也是一个屏幕类。(2)Canvas类是底层界面编程基类,是一个抽象类,编程时必须继承该类并实现其paint()方法。2. 在实际编程中通常需要重写Canvas类什么方法?应用程序是否可以直接调用这个方法?说明能或不能直接调用的理由。答:在实际编程中通常需要重写Canvas类的paint()方法;paint方法只能被系统调用,应用程序不能直接调用该方法,用于更新界面,而且每次调用paint()方法都需要传递画图的画笔Graphics,如果用户想要调用paint()方法,只能通过调用repaint()方法间接调用Paint()方法。3. 什么是按键事件?什么是指针事件?答:(1)按键事件是由键盘引发的事件,在底层用户界面开发中,我们需要自己来编程处理这类事件。在Canvas类中存在三种处理按键事件的方法,当相关的键盘按下时,调用相对应的方法。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1