计算机科学与技术专业毕业论文同学录管理系统设计与实现_第1页
计算机科学与技术专业毕业论文同学录管理系统设计与实现_第2页
计算机科学与技术专业毕业论文同学录管理系统设计与实现_第3页
计算机科学与技术专业毕业论文同学录管理系统设计与实现_第4页
计算机科学与技术专业毕业论文同学录管理系统设计与实现_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘 要 随着现在智能手机越来越普及,移动电子商务新一轮的竞争也将逐渐展开。我们作为21世纪的IT人员,应该具备熟悉并运用新一代google推出的android系统来开发手机订餐系统的能力。本系统就是充分利用android和数据库技术,主要以ListView Widget来作为搜索加载,显示餐厅数据。重写访问数据库的类,利用其内置的方法访问数据库。通过使用手机内的SQLlite数据库来创建数据,同时迎合现在年轻人对于智能手机的喜爱和追捧。该系统相对于传统的订餐模式和前几年流行的短信订餐模式而言,界面友好,功能更加强大,因而本系统更具有优势。 关键字:智能手机;android;移动电子商务;手机订餐;SQLlite Abstract With the increasing popularity of smart cellphones, a new round of competition inmobile e-commerce will expand gradually.So we,the new generation of IT staff should be familiar with android system in order to develop mobile food-booking systems.The mobile system and database technology are in full use of android.It is mainly used by ListView Widget to load and search,display the restaurantdata,Rewritethe classto access the database, using itsbuilt-inway toaccess the database.By using the cellphones SQLlite database to create data,it caters to young peoples tastes and sought after smart cellphones. Comparing to the traditional ordering patterns and SMS,it has the advantages of friendly interface and powerful functions. Key words :smart cellphones;SMS;android;Mobile e-commerce;phone reservation;SQLlite 目 录 1 绪论.13 1.1 知识背景.13 1.1.1 android系统简介.13-171.1.2 android application层应用.17-18 1.2 eclipse安装及android sdk配置.18-21 2.1 系统概要.21 2.1.1 android概要.21 2.2 总体设计.22-243 详细设计.24-39 3.1 具体类的设定.24-363.1.1 类CreateRestaurant.Menu.java的实现.243.1.2 类InitRestaurantMenu.java的实现.25-273.1.3 类EditRestaurantMenu.java的实现.27-303.1.4 类ChooseRestaurant.java的实现.30-333.1.5 类GeoPointImageOverlay.java的实现.33-343.1.6 类MySQLiteOpenHelper.java的实现.34-36 3.2 类中包含的.xml文件设置.36-39结束语.39致谢.394 主要参考文献.40-415 (附录)软件流程图.41-42 第一章 绪论 手机订餐的出现必将改变人们对订餐的看法。在手机订餐之前,无论是学生族还是上班族,电话订餐往往是采用最普遍的订餐方式。然而美在线订餐网站GrubHub通过发布iphone和android的手机订餐应用,在短短的5个月时间内融资达到2000万美元。7这个数字足以使我们对手机订餐的前景刮目相看。电话订餐相对于手机订餐而言有很大的局限性,首先是时效问题,订餐高峰期,一部电话根本招架不住那么多的订餐顾客;其二,不利于同学们对周围饭店信息的广泛获取;其三,点菜不方便;其四,是打电话的成本过高。综上所述,我们需要推广手机订餐来取代人们所习惯的电话订餐方式。13 手机订餐的出现得益于互联网的发展,在Internet高速发展的今天,互联网已经越来越成为人们快速获取、发布和传递信息的重要渠道,它在人们的经济、政治、生活等各方面发挥着越来越重要的地位,而互联网发展的短短十年间,智能手机的发展和手机的3G化已然成为互联网发展的两个最新热点。我们现在所使用的HTC智能手机,就运行着当代最流行的智能手机操作系统之一的android系统。围绕着该操作系统,android market开放平台上截止至今已经有25万个应用。每个Android平台上的开发人员都希望自己能拥有属于自己的应用程序发布到开放平台中,设计与开发android的应用软件对我们把握移动电子商务市场行情有着重要的意义。111.1 知识背景1.1.1 android系统简介 Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件。16 同时android系统以linux作为核心,使用Java作为编程语言,使接口到功能,都有层出不穷的变化,其中Activity等同于J2ME的MIDlet,一个Activity类别(class)负责创建视窗(window),一个活动中的Activity就是在foreground(前景)模式,背景执行的程序叫做Service。两者之间透过由ServiceConnection和AIDL连结,达到复数程序同时执行的效果。如果执行中的Activity全部画面被其他Activity取代时,该Activity便被停止(stopped),甚至被系统清除(kill)。View等同于J2ME的Displayable,程序人员可以透过View类别与“XML layout”档将UI放置在视窗上,Android 1.5的版本可以利用View打造出所谓的Widgets,其实Widget只是View的一种,所以可以使用xml来设计layout,HTC的Android Hero手机即含有大量的widget。至于ViewGroup是各种layout的基础抽象类别(abstract class),ViewGroup之内还可以有ViewGroup。View的构造函数不需要再Activity中调用,但是Displayable的是必须的,在Activity中,要通过findViewById()来从XML中取得View,Android的View类的显示很大程度上是从 XML中读取的。View与事件(event)息息相关,两者之间透过Listener结合在一起,每一个View都可以注册一个event listener,例如:当View要处理用户触碰(touch)的事件时,就要向Android框架注册View.OnClickListener。18 Android系统在google创建之初就已经大致定下了以下的4层体系结构,其中4层体系结构图大致可以由下图来表示: 图1 android体系结构图18其中蓝色部分:应用程序。绿色及黄色部分:中间件。 红色部分:作业系统。 Android语言在程序语言方面有很大的提高,其本身执行于Linux kernel之上,但并不是GNU/Linux。因为在一般GNU/Linux里支持的功能,Android大都没有支持,包括Cairo、X11、Alsa、FFmpeg、GTK、Pango及Glibc等都被移除掉了。Android又以bionic取代Glibc、以Skia取代Cairo、再以opencore取代FFmpeg等等。Android为了达到商业应用,必须移除被GNU GPL授权证所约束的部份,例如Android将驱动程序移到userspace,使得Linux driver与Linux kernel彻底分开。bionic/libc/kernel/ 并非标准的kernel header files。Android的kernel header是利用工具由Linux kernel header所产生的,这样做是为了保留常数、资料结构与宏。 Android在中介程序的选择和构建方面完成的非常出色,其包括有:1、 作业系统与应用程序的沟通桥梁,并用分为两层:函数层(Library)和虚拟机器(Virtual Machine)。 Bionic是Android改良libc的版本。Android同时包含了Webkit,所谓的Webkit就是Apple Safari浏览器背后的引擎。Surface flinger是就2D或3D的内容显示到萤幕上。2、 Android使用工具链Toolchain为Google自制的Bionic Libc;采用OpenCORE作为基础多媒体框架。OpenCORE可分7大块:PVPlayer、PVAuthor、Codec、PacketVideo Multimedia Framework(PVMF)、Operating System Compatibility Library(OSCL)、Common、OpenMAX。使用skia为核心图形引擎,搭配OpenGL/ES。skia与Linux Cairo功能相当,但相较于Linux Cairo, skia功能还只是阳春型的。2005年Skia公司被Google收购。3、 多媒体资料库采用SQLite资料库系统。资料库又分为共用资料库及私用资料库。用户可透过ContentResolver类别(Column)取得共用资料库。4、 Android的中间层多以Java实作,并且采用特殊的Dalvik虚拟机器(Dalvik Virtual Machine)。Dalvik虚拟机器是一种“暂存器型态”(Register Based)的Java虚拟机器,变数皆存放于暂存器中,虚拟机器的指令相对减少。五、Dalvik虚拟机器可以有多个实例(instance),每个Android应用程序都用一个自属的Dalvik虚拟机器来执行,让系统在执行程序时可达到优化。Dalvik虚拟机器并非执行Java字节码(Bytecode),而是执行一种称为.dex格式的档案。1.1.2 android application层应用 在上一节android体系结构图中,我们可以看出Android的最上层包含有两个重要的层次,及Application层和Application Framework层,这里就牵涉出一些有关Application层的基本内容,这里面包含有常用的Activity、Home、Contents、Phone、Browser这样五个在android sdk开发中经常用到的5个概念,因此下面有必要介绍有关Application层和Application Framework层的基本内容。 Application Framework层: Android在基于Linux2.6的内核下,依靠自身提供的类似虚拟机结构。通过提供开放的开发平台,使开发者能够编制极其丰富和新颖的应用程序。开发者可以自由地利用设备硬件优势、访问位置信息、运行后台服务、设置闹钟、向状态栏添加通知等等,很多很多。 开发者可以完全使用核心应用程序所使用的框架APIs。应用程序的体系结构旨在简化组件的重用,任何应用程序都能发布他的功能且任何其他应用程序可以使用这些功能(需要服从框架执行的安全限制)。这一机制允许用户替换组件。 所有的应用程序其实是一组服务和系统,包括: 视图(View)-丰富的、可扩展的视图集合,可用于构建一个应用程序。包括包括列表、网格、文本框、按钮,甚至是内嵌的网页浏览器 内容提供者(Content Providers)-使应用程序能访问其他应用程序(如通讯录)的数据,或共享自己的数据 资源管理器(Resource Manager)-提供访问非代码资源,如本地化字符串、图形和布局文件 通知管理器(Notification Manager)-使所有的应用程序能够在状态栏显示自定义警告 活动管理器(Activity Manager)-管理应用程序生命周期,提供通用的导航回退功能。 Application 层: Android装配一个核心应用程序集合,包括电子邮件客户端、SMS程序、日历、地图、浏览器、联系人和其他设置。所有应用程序都是用Java编程语言写的。更加丰富的应用程序有待我们去开发! 从上面我们知道Android的架构是分层的,非常清晰,分工很明确。Android本身是一套软件堆迭(Software Stack),或称为软件迭层架构,迭层主要分成三层:操作系统、中间件、应用程序。那么其中 Phone为Android电话通信和短信发送功能提供了基本的功能,Home又是Android启动的一切基础,Browser则足以使Android在浏览器领域和web2.0时代成为IT企业中的领军人物,这一切都为我们使用Android打下了良好的基础。1.2 eclipse安装及android sdk配置 在了解有关Android系统的简单知识后,下面要知道的是如何在windows平台下安装google官方推荐的eclipse编译器,并在eclipse编译器下集成android sdk开发环境的步骤:13一相关下载(1) java JDK下载:进入该网页: /javase/downloads/index.jsp 图2 java jdk下载界面选择 Download JDK 只下载JDK,无需下载jre.(2)eclipse下载 进入该网页:应选择第一个(即eclipse IDE for java EE Developers) (3)下载Android SDK,在android官方网站上下载专门的sdk。 说明: Android SDK两种下载版本,一种是包含具体版本的SDK的,一种是只有升级工具,而不包含具体的SDK版本,后一种大概20多M,前一种70多M。二Eclipse配置 1 安装android 开发插件 (1)打开Eclipse, 在菜单栏上选择 help-Install New SoftWare 出现如下界面: 图3 eclipse install安装 点击 Add按钮,出现如下界面:图4 add进入界面 输入网址: 点击 Next按钮 ,出现如下界面:图5 Android Development Tools 安装界面 后面即可通过选择I accept来完成相应android sdk开发环境的安装,成功后会在eclipse的工具栏上出现android机器人的相应图标,此时说明android环境已安装好。 2.配置android sdk (1)点击菜单window-preferences,进入如下界面:图6 android preferences配置界面 选择你的android SDK解压后的目录,选错了就会报错,这个是升级工具,目前还没有一个版本的SDK。 (2)升级SDK版本,选择菜单 window-Android sdk and avd manager,在里面勾选update all的选项,则android对应的每个sdk api开始执行安装。 (3)新建AVD(android vitural device),和上面一样,进入android sdk and avd manager,选中Vitural Devices 在点击New按钮,名称可以随便取,target选择你需要的SDK版本,SD卡大小自定义,点击 Create AVD,则创建AVD完毕。 3.新建Android项目 在file目录下选择new选项,并选择下一级菜单中的other选项,这样就可以新建得到一个android project,到此即完成了android sdk的所有工作。第二章 系统分析2.1 系统概要开发android平台下的手机订餐系统,主要目的是为了满足两方面的需求:一方面是满足以android为系统的手机用户软件使用需要;另一方面则是为了满足上班族对中餐的需要。因此我们要结合以上两方面来分析手机订餐系统的设计意义。上班族希望自己每天的饮食能同时做到经济、实惠。但是很多时候上班族都忙于自己的工作,一方面他们无法将自己的精力分摊到饮食中,而另一方面现在许多餐馆的食品质量实在是无法让人恭维。民以食为天。特别对于上班族来说,很多人孤身一人在外面上班,现实生活中每一个人与周围同事之间总为了每天中午应该吃什么而发愁。那么开发android平台下的手机订餐系统对于解决上班族的问题起着至关重要的作用。2.1.1 Android概要 本系统中最重要的功能即要完成数据库的及时更新,对Android手机而言,最好的方式莫过于使用SQLite热量骰子地图来整合应用。因此在Android概要中,SQLite的应用过程显得非常重要,Android整合了轻量级的SQL数据库,从而大大减轻了开发者的负担。 数据库支持每个应用程序无论大小的生命线,除非所有的应用程序只处理简单的数据,那么就需要一个数据库系统存储你的结构化数据,Android使用SQLite数据库,它是一个开源的、支持多操作系统的SQL数据库。在Android中,当我们为某个应用程序创建的数据库,只有它可以访问,其它应用程序是不能访问的,数据 库位于Android设备/data/data/databases文件夹中,包含了基本数据库所具有的各种语言功能。2.2 总体设计Android地图整合应用部分采用了SQL数据库,程序使用了手机里的SQLlite创建数据,提供了ListView Widget来作为搜索加载(SELECT),以显示餐厅数据之用,除了新建餐厅资料之外,在ListView上设计与User交互的OnClick Listener,使用户随时可以进入餐厅维护的界面,同时在以上步骤中支持各个餐厅的“删除”与“修改”功能。2通过以下这张表来简单反映出该程序的6个部分和其主要功能:程序名称程序说明CreateRestaurant.Menu.javaActivity进入点为欢迎界面Activity,提供了3个Menu功能(添加餐馆、编辑餐馆、今天饮食),使用户可以从这个界面开始操作。 InitRestaurantMenu.java“添加餐馆”Activity,提供一个新建餐厅表单Layout以及两个Menu功能(编辑、今天饮食),在这个Activity中,让用户新建餐厅数据进入数据库,当数据库发现欲创建的餐厅名称已存在于数据库,便不运行添加的动作,在User单击“送出”按钮后,随即前往“编辑”Activity。 EditRestaurantMenu.java“编辑餐馆”Activity,这是一个TestView与一个LIstView所组成,在加载此Activity的同时,自数据库中选出已创建好的餐厅数据,将之显示于ListView当中。当用户单击餐厅名称,则跳出对话窗口提供“编辑”或“删除”餐厅数据功能。 续表 ChooseRestaurant.java今天饮食Activity,这个Activity包含了一个TextView显示被勾选的餐厅资料之外,也提供了一个MapView来显示该餐厅的地图,运行此Activity程序会自数据库里选出所有餐厅数据,接着,以随机数的方式随机取出餐厅名称、地址以及热量等数据。 GeoPointImageOverlay.java自定义在地图上放置图片的Overlay类,可让程序调用直接传入Drawable ID与GeoPoint在MapView上显示图片文件Overlay。 MySQLiteOpenHelper.java自定义数据库访问类,包含新建数据表(OnCreate())、查询数据表(select())、删除数据记录(delete())以及新建数据记录(Insert())等方法。表1 订餐系统总体设计介绍 六个大类的设计从整体上相辅相成,类的组织则由附录中的类的组织结构图来完成。本设计类图在论文的最后,包含有软件设计的全部流程图和全设计类图。这个类图主要的作用是用来说明本程序的基本运行流程和该系统在设计过程中界面和类的整体结构。以上的6个类的内容在整体设计中都会利用到GPS+Camera的混搭,让创建餐馆功能得以轻松完成,而且不需要键入任何地址数据,也能让照片拥有地理坐标,最后存储在数据库中,让程序骰子取出使用。第三章 详细设计3.1 具体类的设定 3.1.1 类CreateRestaurant.Menu.java的实现 第一个类CreateRestaurant类主要是为了给用户提供了在进入欢迎界面后完成后面后续步骤的操作。这个Menu导引用户实现其对应的功能,整个程序内容中主要包含了有关Menu菜单的描述。主程序中包含了3个Menu功能菜单,这3个菜单分别指向了系统中包含的其它3个功能,即新建餐馆、编辑餐馆和今天饮食的问题。 对于程序中可能出现的问题,则要事先设置好相应的访问规则,这里有3个分支,所以在选择结构中我考虑使用到switch-case选择结构,这样判定不仅准确性高,而且能更好的提高程序整体的复用性。以下是该程序中的关键步骤: 在创建菜单栏过程中,以下3个android菜单创建过程最为关键。通过这3个步骤来依次管理Menu的3个部分下对应的菜单,以下是3条执行语句。 /* 建立3个Menu选单 */ menu.add(idGroup1, MENU_ADD, orderItem1, R.string.str_manu1).setIcon(android.R.drawable.ic_menu_add); menu.add(idGroup1, MENU_EDIT, orderItem2, R.string.str_manu2).setIcon(android.R.drawable.ic_dialog_info); menu.add(idGroup1, MENU_DRAW, orderItem3, R.string.str_manu3).setIcon(R.drawable.hipposmall); Android在menu选项中加入identifier,这些identifier的作用是给刚才的menu选单提供识别标识,从而能使它们可以唯一被计算机所识别。点击Menu时,系统调用当前Activity的onCreateOptionsMenu方法,并传一个实现了一个Menu接口的menu对象供你使用。 /* 独一无二的menu选项identifier,用以识别事件 */ static final private int MENU_ADD = Menu.FIRST; static final private int MENU_EDIT = Menu.FIRST+1; static final private int MENU_DRAW = Menu.FIRST+2;3.1.2 类InitRestaurantMenu.java的实现 添加餐厅Activity程序,提供了一个输入表单,该表单内包含餐厅名称、地址以及热量三个字段,皆为必填字段,当用户单击送出 按钮,则先查询数据库里是否有已存在的餐厅名称。当餐厅名称未存在时,才创建新的餐厅数据进数据库,随后关闭该Activity,前往“编辑餐馆”Activity进行维护与查看餐厅数据列表。欲使用自定义数据库访问类(MySQLiteOpenHelper.java)来查询数据,则是调用dbHelp.select()来进行查询,需传入的参数选项依次为数据表名称(table)、查询取得字段(columns)、查询条件名称(selection)、查询条件值(selectionArgs)、分组别GROUPBY参数(groupBy)HAVING参数(having)以及ORDERBY参数(orderby)。在使用数据库新建数据的过程中,由于数据表(t_restaurant)字段有4个:f_id、f_name、f_address和f_cal,分别代表数据ID、餐厅名称、餐厅地址与消耗热量,创建的字段类型除了f_id为自动增加的整数类型之外,其余均使用text类型,这样做的一个好处是有效避免了UI会检查各种格式的问题。以下是该程序中的关键步骤:在数据库中每添加一个餐厅资料,那么需要我们对每一个新建的餐厅资料要有明确的标识方式,就像关系数据库有标识符和对应关系一样,我们需要明确餐厅的基本资料,下面的申明就是对应餐厅的资料使用:/* version必须大于等于1 */ int version = 1; /* Table数据表 */ String tables = t_restaurant ; /* 字段名称 */ String fieldNames = f_id, f_name, f_address, f_cal ;/* 字段类型 */ String fieldTypes = INTEGER PRIMARY KEY AUTOINCREMENT, text , text, text ;这个餐厅数据界面在启动功能选项的时候,我可以在该界面停留并做出两个选择。其中一个是前往编辑功能、而另外一个是前往系统随机数选择餐厅功能,为了区分开这两个选项,在上一个类中已经预先定义好了MENU_EDIT和MENU_DRAW这两个标识符来标识程序的流向。switch(item.getItemId() case (MENU_EDIT): /* 前往编辑功能 */ if(dbHelper!=null & dbHelper.getReadableDatabase().isOpen() dbHelper.close(); intent.setClass(EX10_06_02.this, EX10_06_03.class); startActivity(intent); finish(); break; case (MENU_DRAW): /* 前往系统随机数选择餐厅功能 */ if(dbHelper!=null & dbHelper.getReadableDatabase().isOpen() dbHelper.close(); intent.setClass(EX10_06_02.this, EX10_06_04.class); startActivity(intent); finish(); break; return super.onOptionsItemSelected(item); 3.1.3 类EditRestaurantMenu.java的实现 类EditRestaurant的主要功能是为了完成“编辑餐馆”的Activity功能,该Activuty在UI部署上设计了两个TextView(mTextView01)与ListView(mListView01),前者用以显示此Activity的功能描述,后者则是提供在数据库搜索之后得到的显示结果。此过程于onCreate()同时,调用mListView01.setOnItemListener()方法捕捉User在ListView上单击按键或单击餐馆名称之后要处理的事件,如程序里所描述的,当User在ListView上单击了其中一个餐厅名称,便会跳出AlertDialog,在这个Dialog对象上显示两个Item选项即“数据修改”和“删除数据”。 运行“数据修改”功能,程序依据用户选择餐厅的intItemSelected(数据库字段f_id)进行数据库更新的工作(dbHelper.update(),而在更新之前,会带入该餐厅原本的数据于AlertDialog里的3个EditText Widget当中,这样可以供用户参考旧的记录进行修改。以下是该程序中的关键步骤:从类的结构来看,这个类作为本程序的核心类,我们自然要关注的是这个类的核心功能。那么依照我们前面对数据库的定义方式,当我们确定google map定位的具体位置时,比如我目前在武汉,则数据库应该保存处于武汉这个地区所有可能的餐厅进行选择,因此我们要对数据字段进行初始化说明。private List allRestaurantID;private List allRestaurantName;private List allRestaurantAddress;private List allRestaurantCal; private List lstRestaurant; private int intItemSelected=-1; /* 数据库数据表 */ private String tables = t_restaurant ; /* 数据库字段名称 */ private String fieldNames = f_id, f_name, f_address, f_cal ; /* 数据库字段数据型态 */ private String fieldTypes = INTEGER PRIMARY KEY AUTOINCREMENT, text , text, text ; 更新ListView数据的清单对整个系统的稳定运行和维护起到作用,在前一个查询得到的数据之后通过更新来完成对餐厅的多次查询,经过多次查询后完成对新一片区域餐厅的搜索,最终可以删除餐厅的数据。当数据库无数据的时候,我们就把flag位置为-1,这样好区分数据库是否有无记录。 if(lstRestaurant.size()0) ArrayAdapter adapter = new ArrayAdapter(EX10_06_03.this, R.layout.simple_list_item_single_choice, lstRestaurant); mListView01.setItemsCanFocus(true); mListView01.setChoiceMode(ListView.CHOICE_MODE_SINGLE); mListView01.setAdapter(adapter); else /* 数据库无纪录,将flag设定为-1 */ intItemSelected = -1; ArrayAdapter adapter = new ArrayAdapter(EX10_06_03.this, R.layout.simple_list_item_single_choice, lstRestaurant); mListView01.setItemsCanFocus(true); mListView01.setChoiceMode(ListView.CHOICE_MODE_SINGLE); mListView01.setAdapter(adapter);有关android每个函数的用法,我参考的是android的widget合集中每一个部分的使用方法。跟类CreateRestaurant.Menu.java有类似的地方在于我们要定义一个boolean函数onMenuItemSelected(),这个函数就会用到我们在第一个类中已经定义的3个识别标识identifier,利用switch-case结构来实现对进入界面所需要的选择步骤。switch(item.getItemId() case (MENU_ADD): /* 前往新建餐厅功能 */ if(dbHelper!=null & dbHelper.getReadableDatabase().isOpen() dbHelper.close(); intent.setClass(EX10_06_03.this, EX10_06_02.class);startActivity(intent);finish();break;case (MENU_DRAW):/* 前往系统随机数选择餐厅功能 */if(dbHelper!=null & dbHelper.getReadableDatabase().isOpen()dbHelper.close();intent.setClass(EX10_06_03.this, EX10_06_04.class);startActivity(intent);finish();break;return super.onMenuItemSelected(featureId, item);3.1.4 类ChooseRestaurant.java的实现ChooseRestaurant类将会对每一个你将要选择的餐厅进行一次二次选择,而为了保证我们在餐厅选择过程中保持有一定的客观性,所以该Activity会以随机数选择餐厅数据drawRestaurant(),所以要从该类的oncreate()方法开始,便会向数据库运行查询所有餐厅的工作(select f from tables0),通过该查询得到的查询结果将会以List存放,同时包含有以下4个对象即allRestaurtantID(f_id)、allRestaurtantName(f_name)、allRestaurtantAddress(f_address)、与allRestaurtantCal(f_cal)。随机数取得众餐厅里的ID值(allRestau-rantID),依次此ID我们可以查出选择餐厅的地址、名称以及中午吃饭所能获得的热量。 在这个Activity当中,除了TextVIew Widget外,尚有一个com.google.Android .maps.MapViewWidget,所以这个类我们需要注意的是它并不直接继承自Activity, 而是继承自MapActivity,关键方法部分也必须重写isRouteDisplayed()方法,否则可能会导致程序在编译过程中产生错误。当我们有了被勾选的餐厅地址(allRestaurtantAddress.get(intItemSele),便可以利用android中非常重要的自定义函数getGeoByAddress()来反查该地址的 GeoPoint坐标,获得坐标后最后调用refreshMapViewByGeoPoint()函数来更新Map View里的Google地图。下面是程序关键部分说明: 这个类的使用需要注意的地方是我们要用到google地图所提供的API接口,地 图精确定位是google利用卫星所创造的优势,那么我们编写利用google地图完成 勾选餐厅位置功能,大致的步骤是需要先获得查询地址的地理坐标-依照地理地址 反查询地理坐标-更新MapView地图-在地图上显示OverLay图片,由此步骤我们 用到的有关android.maps下的地图包。 查询GeoPoint类下的函数来取得地理坐标,以下是实现部分: /* 以地址查询地理坐标 */ GeoPoint gp = getGeoByAddress(allRestaurantAddress.get(intThrowIndex); if(gp=null) /* 地址无法反查为GeoPoint时 */ mMapView01.setVisibility(MapView.GONE); else /* 更新MapView地图 */ mMapView01.setVisibility(MapView.VISIBLE); showImageOverlay(gp); refreshMapViewByGeoPoint(getGeoByAddress (allRestaurantAddress.get(intThrowIndex),mMapView01,intZoomLevel, true); else /* 数据库无纪录 */ GeoPoint类在系统

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论