基于DataSnap技术的大学城商圈安卓APP的设计与实现*

2018-05-22 03:50吴顺利史国滨
计算机时代 2018年5期
关键词:窗体客户端分类

吴顺利,张 旭,孙 伟,史国滨

(黑龙江八一农垦大学,黑龙江 大庆 163319)

0 引言

移动互联时代,移动终端成为大众获取富媒体信息的主要手段,手机中APP应用成为大众获取信息的主要途径之一。大学城商圈娱乐设施完备,文化饮食和公共文化活跃。充分发掘此地域圈内人员活动信息可积累大量可用信息。这些信息对实现目标人群精准导向,提高商圈活跃度,提升公共服务质量会有很大帮助。目前大多数手机APP研究集中在如软件需求分析[1-2]、界面设计[3-4]、某一领域需要[5-7],而对实现相关应用技术细节的文献[8-10]较少。

手机APP程序需要建立服务器平台,开发手机端软件功能。如何实现快速开发,需有一套完整高效的解决方案。本文运用Rest DATASNAP技术,采用跨平台开发工具DELPHI XE10[11]实现高效的手机软件开发。目标是开发覆盖商圈内商家及公共服务设施手机端APP。通过DATASNAP技术以短连接方式,可满足数千用户的并发连接,满足实际的应用需要。

本手机APP实现了分类信息存储及显示、商圈设施定位、显示详细信息,异步更新提高交互性体验、用户信息收集等功能。

1 服务器端的开发

系统架构如图1所示,数据库存储采用开源数据库MYSQL,通过在数据库中设计地域分类数据表、商家大类和子类分类数据表、商品信息数据表、用户表、访问信息表等实现按地域、地理坐标、商品分类、商品名称、用户关注度等多级信息的分类显示,通过存储访问信息表,存储如IP、位置、手机信息、访问兴趣点信息等,可在用户积累到一定规模后建立大数据信息源,为更加精准的数据服务提供支持。以DELPHI快速建立DATASNAP server三层结构。客户端与服务器间采用REST方式连接DATASNAP Server并访问目标mysql数据库。服务器以TCP/IP短连接方式,通过sqlquery实现接收来自互联网的客户端特定的数据库查询指令,并通过datasetprovider提供远程数据访问服务,可满足数百至上千用户的并发连接。与其他开发方案比较[8,12],服务器端程序通用简化、开发快速,服务器端在同样并发访问量下负荷较小,可提供更多用户的同时访问能力,整体技术方案可靠、高效,相较其他方案更易于实现。

图1 系统架构

2 安卓系统客户端程序

2.1 启动画面定制及主界面开发

客户端功能如图2所示。

图2 客户端功能

启动画面为手机端程序的流行方式,主窗体通过菜单提供多个不同分类显示。各详细信息窗体显示如:特定分类信息、兴趣点具体信息等。为使手机APP适合各尺寸分辨率的手机,在窗体设计中采用ScaledLayout布局方案,并通过动态获取窗体尺寸完成页面对象自适应布局处理。通过自定义窗体显示内容实现启动画面并通过在启动窗体中使用application.createform 方法,将主界面显示至前台并将启动画面运用destroy方法销毁处理。其代码如下:

Application.CreateForm(TMainform,Mainform);

Mainform.SendToBack;

Mainform.Show;

Mainform.BringToFront;

Mainform.Activate;

Application.MainForm:=Mainform;

Splashform.destroy;

图3 主界面

图4 分类显示页

主界面图3底部菜单分类显示以tabcontrol控件实现,为增强过渡动画效果,在图片按钮区添加BitmapAnimation控件,定义开始和结束图片,当点击菜单图片时触发动画过渡切换至其他页面,从而提供更友好的访问体验。

2.2 主窗体中可触摸轮换图片实现

轮换图片是在程序中建立tabcontrol多标签页显示不同图片,通过定义timer定时器自动将当前的activetab页自加,并在显示最后一个标签页时将activetab值设定为tabs[0],从而自动循环。手机中最重要的交互功能就是手势,通过在tabcontrol中onGesture识别手势的两种类型sgiLeft、sgiRight并改变activetab值实现跟随手势切换页面。由右向左滑动部分代码如下:

case EventInfo.GestureID of sgiLeft:

if SlideImg.ActiveTab<>SlideImg.Tabs[SlideImg.TabCount-1]

then begin

SlideImg.ActiveTab=SlideImg.Tabs[SlideImg.TabIndex+1]

else begin SlideImg.ActiveTab:=SlideImg.Tabs[0];

……

APP程序中另一个最重要的内容是,显示所需的图文信息,这些信息存储在远端的数据库服务器中,通过用户点击、分类筛选,提供定制化的信息。如图4,客户端多以listview来显示用户筛选信息,通常定义客户端数据库连接单元的方式实现。图5数据访问方式,是客户端通过建立sqlconnection连接远端的DATASNAP服务器,以Dsprovider连接远端DATASNAPserver特定的ServerMethod类,以ClientDataSet接收远端服务器的数据流。通过ClientDataSet.CommandText执行特定数据查询并返回结果。通过手势上下拉加载分页后的数据,采用更改动态查询数据起始序号的方式,设置ListView的OnMouseUp和OnPullRefresh事件来响应上拉和下拉手势完成数据动态分页更新,采用此方法可有效降低网络数据传输量,并可减少由于查询并响应所需时间造成的用户长时间等待,提升用户体验。

图5 数据访问方式

Listview中显示图片和文本信息是APP中常采取的方法,由于网络的原因,如果图片信息同样存储在数据库中将会随着数据库信息量的增加,其访问时长会受到较大影响,为提高交互访问体验,采用了以下方法。①数据库中仅存储图片网络地址的形式,当手机端访问时借助远端DATASNAP Server访问数据库并提供给手机端,手机端APP按照所获取的图片地址去访问并显示在手机端,这在一定程度上降低了服务器的负荷,可提供更多、更流畅的客户访问体验。②在手机端通过异步的方法同时获取接收到的多个图片,并显示在手机端,使手机端访问体验更佳。③为进一步提供访问的实时交互性,可将访问的图片进行预处理,将图片按照访问需要存储成不同尺寸的文件以加快访问速度。④图片异步访问通过建立图片访问的类,以匿名线程的方法,通过idhttp组件获取图片数据流并显示在listview中,防止主窗体假死现象。在异步显示图片中,设计预加载图片,预加载图片以图片流形式保存为全局变量,在加载网络图片前加载显示在相应图片区,在加载网络图片后被替换,这使得显示效果更加理想。⑤在程序中做容错处理,合理利用try except可防止由于网络不稳定、访问异常等造成的程序崩溃事件的发生。通过以上方式,可在上下拉后页面得到快速更新,效果良好。

2.3 POI信息的实现

POI(point of interest)“兴趣点”内信息包括地理位置、名称、附加图片及文字信息描述等。各兴趣点信息可采用传统人工实地采集地理坐标、现场拍照、人工分类获取1手信息,也可采用自动化采集手段,例如通过采集软件“火车头”、“八爪鱼”[13]等,通过自定义规则,进行如美团网、大众点评网等分类数据提取并进行人工处理后导入数据库中。其中最为重要的数据之一是地理坐标信息,美团网采用腾讯地图,人工实地采集采用GPS坐标,各坐标系统不同,定位精准度和位置偏差较大,可采用坐标转换工具进行统一转换[14]。由于多种原因可能造成数据准确度不足,本APP实现采用百度地图方案,将各种方法采集的坐标通过开放的坐标转换工具转换成百度坐标,并根据百度地图中已知标定的几个目标兴趣点,通过建立一元线性方程进行坐标修正,保证在特定小范围区域内偏差在10几米的精度范围。

在手机APP中采用了webbrowser结合baidu javascript api混合实现手机端的定位与显示。手机的实时定位以LocationSensor进行gps及wifi双方式的自动获取,并以此方式获取的位置信息做为查询数据库获得周边信息的位置定界。各“兴趣点”的多张图片信息的显示,可通过动态获得手机尺寸,自适应生成图片列表。除采用异步方式获取网络图片外,当点击某张图片时可以放大到手机全屏并实现放大、旋转等操作。其实现是通过定义窗体的OnGesture事件,在igiRotate和igiZoom中实现。通过Self.ObjectAtPoint(ClientToScreen(EventInfo.Location))获取图片对象并控制图片做旋转及放大处理。其部分代码如下:

LObj:=Self.ObjectAtPoint(ClientToScreen(EventInfo.Location));

if LObj is TImage then begin {rotate the image}

LImage:=TImage(LObj.GetObject);

if(TInteractiveGestureFlag.gfBegin in EventInfo.Flags)

then FLastAngle:=LImage.RotationAngle

else if EventInfo.Angle<>0

then LImage.RotationAngle:=

FLastAngle-(EventInfo.Angle*180)/Pi;

2.4 用户信息获取

获取用户信息,如手机厂商、型号、IMEI、安卓版本、位置信息、访问信息点等是进行数据深度挖掘的基础,通过调用androidapi.JNI.JavaTypes,Androidapi.Helpers,androidapi.JNI.Os;并调用TJBuild.JavaClass.MODEL、TJBuild_VERSION.JavaClass.RELEASE、TJBuild_VERSION.JavaClass.RELEASE可获取到设备相关信息,通过执行sql insert命令将信息存储于远端数据库,对用户登录后访问的兴趣点信息进行记录和传回服务器端,实现用户端信息采集做为大数据信息源,为后继精细化数据服务提供支持。

3 结束语

本文运用Delphi跨平台开发工具,以Rest DATASNAP技术开发多层架构手机APP平台,详细描述了系统整体结构和技术实现。采用以上的设计思想,可满足中小型用户量的手机APP应用需要,在开发周期、易用性、安全可靠能力上都满足需要,解决了手机APP开发整体方案中技术难点及实现细节参考资料缺乏的不足,是开发互联网环境下手机APP的一套快速开发的成熟解决方案。

参考文献(References):

[1]刘丹,胡卫星,李玉斌,李畅.移动教育APP的研发现状与应用问题分析[J].电化教育研究,2016.8:47-52

[2]马玉慧,赵乐,李南南,王硕烁.新型移动学习资源——教育APP发展模式探究[J].中国电化教育,2016.4:64-70

[3]谭坤,刘正宏,李颖“.非遗”传承创新语境下的APP界面设计研究[J].包装工程,2015.8:60-3,115

[4]郑文静,殷俊.基于O2O模式的外卖订餐APP的设计研究[J].艺术与设计(理论),2015.9:101-3

[5]陈俊杰,黄国凡.移动图书馆APP的构建策略和关键技术——以iOS为例[J].现代图书情报技术,2012.9:75-80

[6]杨艳妮,明均仁,张杰.基于Android的移动图书馆APP功能设计与实现[J].图书馆学研究,2015.7:24-30,23

[7]周宇,尹生强,王冬青,王英杰.基于Eclipse和Android系统的App开发平台搭建研究[J].青岛大学学报(工程技术版),2016.3:49-53

[8]黄悦深.基于HTML5的移动Web App开发[J].图书馆杂志,2014.7:72-7

[9]张言林,李博,王文博,张财学,张刘通.基于数字化校园的手机app客户端设计初探——东北林业大学“移动校园”手机APP客户端设计[J].设计,2014.2:81-2

[10]张利军.智能手机APP应用前景及发展瓶颈探析[J].电子技术与软件工程,2015.10:69

[11]高勇.Delphi XE6 Android编程入门教程[M].西安出版社,2014.

[12]韩文智,骆文亮.Android平台的移动APP开发方法与应用研究[J].四川理工学院学报(自然科学版)2015.3:22-6

[13]崔玉洁,廖坤.借助八爪鱼采集器实现过刊网刊元数据的自动提取[J].编辑学报,2016.5:485-8

[14]姜楠.坐标转换算法研究与软件实现[D].安徽理工大学硕士学位论文,2013.

猜你喜欢
窗体客户端分类
分类算一算
试谈Access 2007数据库在林业档案管理中的应用
分类讨论求坐标
县级台在突发事件报道中如何应用手机客户端
孵化垂直频道:新闻客户端新策略
数据分析中的分类讨论
基于Vanconnect的智能家居瘦客户端的设计与实现
教你一招:数的分类
巧设WPS窗体控件让表格填写更规范
客户端空间数据缓存策略