基于全景图技术的Android订餐系统设计与实现

时间:2022-10-21 10:38:28

基于全景图技术的Android订餐系统设计与实现

摘 要:结合全景图技术设计Android订餐系统,实现就餐环境查看、餐位预定、点菜等功能。利用Tomcat服务器与Mysql数据库,将用户订单信息保存并反馈给商家,为经营决策提供数据支撑。该系统采用Java语言编写,通过模拟器和智能手机测试,运行良好。

关键词:Android平台;全景图;订桌;Java;智能手机

中图分类号:TP319

文献标识码:A 文章编号:1672-7800(2015)005-0121-03

作者简介:豆帅涛(1992-),男,河南洛阳人,青海大学水利电力学院学生,研究方向为网络技术、操作系统; 谢勇军(1994-),男,湖南娄底人,青海大学水利电力学院学生,研究方向为Android应用。

0 引言

全景图是一种广角图,可以照片、影片、三维模型的形式存在。Google地图“街景”功能即为全景图的典型应用。随着全景图应用的逐步推广,出现了大量类似“街景”的地图,如soso地图、百度地图、高德地图等,给用户带来身临其境的使用体验。目前,全景图主要应用在地图导航方面,在景点、宾馆及高校宣传方面也有少量应用,不过大多针对PC端,Android端全景图应用较少。本文设计并实现一款集宣传、预定、点菜为一体的手机端订餐系统,通过系统将就餐环境用全景图的方式展示出来,同时可预定座位、点菜,提升了用户手机订餐的体验。

1 系统总体架构

系统框架及网络示意图分别如图1、图2所示。

2 具体实现

服务器端采用MyEclipse10.7开发环境,利用Mysql7.0.55数据库及SQLyog可视化数据库操作软件进行开发[1]。Android端采用Eclipse开发,客户端包括首页、订餐、个人中心3个选项卡。将首页设成默认选项卡。

2.1 首页全景图设计

2.1.1 全景图展示

(1)全景图获取。首先导入Android Panoramgl_0.2-Beta.Jar,然后调用Panoramagl自动生成对应的.So文件。导入该包前需在Libs下导入Armeabi,Armeabi-V7a,Mips,X86文件夹。

Panoramagl展示图片样式分为Spherical、Cylindrical、Cubic等3种,为尽可能还原现实场景,本文采用Spherical展示样式。同时,Panoramagl可以展示网络图片、本地图片和资源文件中的图片。如果全景图和APP过大,则不利于软件推广,先将服务器端全景图加载到本地,然后显示本地加载图片,若图片有更新只需替换原文件和添加新文件即可。采用Exists()判断文件夹Panorama是否存在,若不存在则采用Mkdirs()在本地创建文件夹Panorama和Downloadpanorama类,采用Handler和自定义Thread另开线程[4],以POST的访问方式从服务器端获取全景图至Panorama文件夹。餐厅全景图图片按名称编号并放入服务器pits文件夹中。

(2)全景图展示。实现本地全景图展示需要将每一张图片与Json语言写的.Data文件一一对应。xx.data文件中的”urlBase”: "file:///storage/sdcard1/panorama "表示文件位置;"type": "spherical"设置图片展示样式;"keep": "all"保持文件所有设置;"hotspots":[...]为全景图设置热点,其中"atv": 20.0,"ath": 170.0设定热点的位置;"onClick": "lookAt(0.0, 170.0, true); load('res://raw/json_hall’, true, BLEND(2.0, 1.0), 0.0, 190.0)"设置热点点击事件,点击箭头即可实现界面跳转。

通过继承PLview的方法实现图片展示。首先,设置监听器This.Setlistener(New Plviewlistener() {}),方法onDidClickHotspot(PLIView view, PLIHotspot hotspot,CGPoint screenPoint, PLPosition scene3DPoint)使用Toast.makeText()方法提示顾客当前位置;然后,利用Loader = New Pljsonloader ("file:///storage/sdcard1/panoramadata/json_hall")配合.Data文件,从本地读取全景图。

餐厅场景以自定义Spinner下拉菜单的形式展现。点击热点箭头和选中Spinner中的item进行场景切换,为Spinner设置ArrayAdapter,adapter.setDropDownViewResource()实现Spinner实体对象绑定,Spinner.setOnItemSelectedListenr()为每一个item设置监听器,在每一个监听器中调用自定义方法loadPaFromJSON(),将全景图读取到适配器中。创建Viewgroup展示全景图,并为每张全景图设置Zoomcontrols,用来放大和缩小图片。

2.1.2 餐位预定

餐桌以Slidingdrawer的形式展现,点击或上滑Slidingdrawer上的Button按钮[3]即可展开所有桌子。如图3所示,首先读取“information”共享参数文件中的变量CostumTableState,判断是否为true,“true”代表第一次点击或第一次上滑,第一次点击和上滑时展示餐桌预定具体操作方法。设置Button控件inputButton,让客户进入餐桌预定界面,同时在变量CostumTableState=false中不再显示介绍界面,更新文件“information”中的CostumTableState参数。

以Asynctask异步任务和POST的方法从服务器端获取餐桌状态和数量,使用for循环动态新建Button代表餐桌。 button.setEnabled(true/false)设置为可点击或不可点击灰色状态;button.setText(“xxx”)提示用户,button.setbackground(“@drawable/uable”)设置按键形态;uable.xml文件中,实现按键按下和未被按下状态,并实现按键圆角化;将按钮背景换成灰色的哭脸;upset.png为放在drawable文件夹中的哭脸图片。为每个Button控件设置OnClickListener,点击不可预定餐桌用textview.settext()实现,查看该餐桌被预订的时间,是否正在用餐,已用餐时间等信息。点击可预订的餐桌时将桌号变量CosTablenum以Sharedpreferences格式存入”information”文件中,方便购物车读取。

2.2 订餐页面设计

将菜品分为热菜、特价菜、甜点等。如图4所示,自定义适配器Baseadapter将每一类菜品以Listview的形式展现[5],同时将其进行分页处理,提高APP运行效率。定义数组读取服务器端菜名、图片、介绍、价格等。Listview的每一个item包括imageview,展示菜品图片,Popupwindow实现在弹出层展示菜品图片,edittext展示和编辑顾客所需的菜品份数,同时通过Button控件add和sub实现菜品份数加减。订单以Sharedpreferences保存到“Order”文件中,防止意外退出导致数据丢失。

2.3 个人中心页面设计

2.3.1 登录注册功能

新建控件edittext实现帐号、密码、确认密码输入。控件checkbox实现记住密码选择框, check选择框为“true”代表选中记住密码,为“false”代表不记住密码。登录成功时将check的状态以Sharedpreferences的形式保存至“information”中。

如图5所示,登录时edit.getText().toString()分别将用户输入的帐号和密码转换成String类型,赋值给name和password。自定义类LThread和LHandler,实现另开线程将变量name、password传送给服务器端。服务器端通过LoginServlet会话接受客户端用户名和密码,通过JDBC与Mysql数据库[2]建立连接,将用户名与数据库中的用户名进行对比,如果该用户名尚未注册则返回给客户端字符串“fz”,如果用户名存在但对应的密码不匹配则返回给客户端“fm”,如果用户名与密码均正确则返回客户端“t”。

将用户输入的账户、密码、确认密码转换成String并赋值给name、password、surePassword。自定义类RThread和RHandler,实现另开线程将变量name、password传送给服务器端。服务器端通过RegisteredServlet会话将从客户端接收到的用户名通过JDBC与数据库中表guest作对比,如此用户已经存在返回客户端字符串“fz”,如果没有该用户则调用DoInsert,将用户名与密码添加到数据库guest表中。

2.3.2 购物车设计

如图6所示,首先判断订单是否为空,为空时textview提醒顾客购物车为空,先进行预定。购物车总体架构包括菜名、单价、菜品实物图、预定桌号。数组price[]、image[]、name[]、introduce[]获取”information”文件中顾客订购菜品的单价、菜名、简介,变量table获取预定桌号。自定义适配器MyAdapter继承BaseAdapter,从数组和变量table中读取listview中每一个item所需数据。“information”文件保存图片名,自定义类MyHandler继承类Handler,并创建和实例化一个Handler对象。自定义类MyThread实现接口Runnable,以post方式访问“http://xxx.xxx.xxx.xxx/xiangBaLao/servlet/xx.png”,所有返回值全部存储到response中,if(response.getStatusLine().getStatusCode() == 200)判断是否成功访问。通过EntityUtils.toByteArray(response.getEntity())方法将response的主体数据保存至 byte[]数组result中,防止内存溢出。使用Message message = Message.obtain()创建对象message,将result赋值给message.obj,利用handler.sendMessage(message)将result传送至MyHandler中进行处理。创建Button控件,Delete设置点击事件,实现listview中具体item删除,点击Delete更改适配器数据源数组中的元素,同时调用自定义函数Calculate(int)实现订单总价的更新并显示总价。实现UI数据更新的同时,利用封装好的共享参数书写类,实现“information”文件中参数更新。

利用计算订单的Button控件payOrder实现共用图片下载时的自定义类MyHandler和MyThread循环,以Arraylist的格式将客户订单提交至服务器端。整型变量way为1代表向服务器端提交数据,为0代表访问并获取服务器数据。提交数据的URL为“http://xxx.xxx.xxx.xxx/ xiangBaLao /servlet/xxx”。同时,采用Asynctask异步任务和POST访问方式将数据存放在Arraylist中,并同时传送给Tomcat服务器,服务器循环接收菜品编号,并将每一个菜品编号转化为字符型加上逗号,连接成StringBuffer对象后存入Mysql数据库。获取菜品编号时,将菜品字符串根据逗号拆开,然后循环传递给客户端。

3 模拟器仿真效果图

模拟器仿真效果如图7、图8所示。

4 结语

本文仅探讨了客户端Android应用系统,商家管理界面在PC端实现,在此不再赘述。该系统采用Java语言开发,在Eclipse与MyEclipse环境下进行设计与制作,可实现环境展示、餐位预定、订菜等功能,极大地提升用户订餐体验。

参考文献:

[1] 孙卫琴.Tomcat与Java Web开发技术详解[M].北京:电子工业出版社,2009.

[2] 聂凯,曹慢慢. Mysql数据库的访问方法浅析[J]. 科技资讯,2010(9):21.

[3] 盖索林.Android开发入门指南[M].北京:人民邮电出版社,2009.

[4] 王家林.Android4.0网络编程详解[M].北京:电子工业出版社,2012.

[5] 吴亚峰,索依娜.Android核心技术与实例详解[M].北京:电子工业出版社,2010.

上一篇:基于Web的CET网报平台设计 下一篇:基于JavaEE的知识管理系统设计与实现