目 录
第一章 绪论 1
1.1课题的研究背景 1
1.2国内外研究发展现状 2
1.3课题研究意义 3
1.4 论文的主要内容与章节安排 4
第二章 相关技术 5
2.1移动通信技术 5
2.1.1移动通技术简介 5
2.1.2本文采用的移动通信技术 8
2.2Android 技术 9
2.2.1Android 简介 9
2.2.2Android 的概念 10
2.2.3Android 体系结构 10
2.2.4Android 的基本组件 13
2.3WebServices 技术 18
2.3.1Web Services 简介 18
2.3.2Web Services 主要技术 19
第三章 系统的总体方案设计 23
3.1系统背景 23
3.2需求分析 24
3.2.1业务需求分析 24
3.2.2系统需求分析 26
3.3系统的部署 27
3.4系统的总体架构 29
3.4.1各架构的对比 29
3.4.2本文选择的系统架构 31
第四章 移动终端的设计与实现 33
4.1 移动终端功能模块 33
4.2移动终端的操作流程 35
4.2.1主程序的操作流程 35
4.2.2水票验证的操作流程 36
4.2.3申请购水的操作流程 37
4.3移动终端软件的结构 38
4.4移动终端的实现 39
4.4.1开发环境的配置 39
4.4.2调用 Web Service 46
4.4.3主要模块和方法 47
第五章 服务器端的设计与实现 53
5.1服务器端的功能模块 53
5.2Web 服务的设计 54
5.3数据库的设计 55
5.3.1数据库框架的设计 55
5.3.2数据库表的设计 56
5.4服务器端的实现 59
5.4.1 软件需求 59
5.4.2开发工具的安装过程 60
5.4.3Web Service 服务器的具体实现 62
第六章 测试与验证 73
6.1测试目的 73
6.2测试环境的选择 73
6.3测试结果 73
总结和展望 77
参考文献 81
致谢 85
攻读硕士学位期间发表的学术论文 87
第一章 绪论
1.1 课题的研究背景
我国不仅是一个人口大国,也是一个农业大国,但是我国的水资源仅占全世 界平均水平的 1/4[1],名列 110 位,且分布极不平衡,已经属于水资源贫困的范 畴[2]。众所周知,灌溉用水是农业发展的重要组成部分[3],而农业又是一个国家 发展经济的主要支撑[4]。但是在我国一些地区,灌溉用水严重浪费[5]。据调查, 我国的农田灌溉水利用系数仅为 0.5 左右[6],再加上水资源短缺的矛盾,其已经 成为我国发展现代化农业的瓶颈。所以加强农田灌溉用水的工作显得十分必要。 目前,我国一些地区的农田灌溉系统主要存在以下现象[7]:
1.农田灌溉系统管理中心在实施灌溉作业时,没有结合当地的降水情况和天 气预报等信息。只是简单的按时间计划进行灌溉,譬如说近期气候干旱,农作物 严重缺水,农田灌溉管理系统中心没有掌握及时的信息导致作物产量严重下降, 给农民带来巨大的损失。或是正在进行灌水作业时,突然有急雨出现,农田灌溉 管理系统没有及时地停止作业,同样给农业生产带来严重的后果。
2.农田灌溉管理系统中心对所管辖农田的配水量往往出现或多或少的偏差。 配水量的多少,完全由农民根据自己的经验情况而定。而农民没有经过专业指导, 很难做到科学地掌握灌溉量的大小。
3.为了做到工作的方便,农田灌溉管理中心采取统一缴费,统一灌溉的方式。 在灌水时间临近的时候,灌溉管理中心通知所有的农户进行缴费灌水,往往个别 用户的不及时缴费导致其他用户不能按时完成灌水作业。
4.农户缴费完后,领取缴费证明,再到农田现场向现场配水操作人员证明后, 方可能完成灌水作业。农户不能在农田现场直接与现场配水操作人员完成缴费, 进而完成灌水作业,给农户工作带来了极大地不便。
上述现象主要是农田灌溉系统管理中心没有及时掌握气象信息或是与农田 现场操作人员没有做到有效地沟通而导致灌溉效率的降低。造成这些的主要原因 是各个部门之间没有良好的信息沟通。
当移动互联网还处于 2G 时代时,移动电话还主要被用于基本通话,并且还 只限于一些高消费人群。人们对一个手机的评价还主要在通话质量这一方面,当 然这也是所有运营商和制造商关注的焦点和提高服务工作的重点。随着技术的发 展和人们日益增长的需求[8],当移动通信进入 2.5G 时,移动电话已不再是简单 的电话,人们可以通过移动电话进行浏览网页等一些简单的操作。这时一些手机 APP 已经呈现出来,也逐渐改变着人们对手机的认识,并且手机消费也逐渐适应 于普通大众。目前,我国已经进入4G移动互联网时代,并且相对领先世界其它 国家。这时,无论是网络传输速度还是手机性能都不可同日而语,且手机 APP 也发生了翻天覆地的变化。再加上手机的携带十分方便和价格非常低廉,一部高 性能手机对于普通百姓来说,已从“奢侈品”变为“必需品”[9]。当然人们也对 手机赋予新的需求,许多原先只能在PC机上才能运行的APP、信息化系统甚至 办公软件都逐渐向移动设备上转移,并且这种趋势是有增无减。越来越多的人们 期望通过手机登陆互联网,完成自己的需求[10]。
移动互联网无形之中改变着现代人的生活方式和工作模式,也改变着人们的 思维方法。如今,只要拥有一部智能手机,就可以随时随地查询想要查询的信息。 这种便利性,对现代人工作效率的提高起到很大的促进作用!
现有的通信技术正好能解决农田灌溉系统中灌溉效率低下的现象。在这种背 景之下,如何利用现有的移动通信技术,解决农田灌溉系统中存在的弊端,使农 田灌溉用水得到有效的利用,已经成为一个不可忽略的话题[11,12]。同时,这也是 农业走向工业化和信息化的有效途径。
1.2 国内外研究发展现状
在向农业现代化迈进的过程中,信息技术已经不知不觉渗透到农业各个领域。 互联网应用对农业发展的影响力也越来越大,甚至在一定程度上对农业的发展起 到决定性的作用[13]。近年来,许多IT公司也争相向农业生产及相关领域涌进, 在农业生产、经营各个方面都可以看到它们的身影,并且竞争也是非常激烈[14]。 例如:江苏移动为本省的农民开展了一系列面向“三农”的信息服务。当地农民可 以通过移手机 APP 查看农业生产方面的信息,比如种植技巧、作物施肥、农业 灌水、产品供求信息以及农业新闻等。也可以通过手机 APP 向农业专家在线寻 求帮助,以最短的时间解决农民农业生产方面的困惑。在我国一些地区的农民已 经实现了利用移动互联网远程监控农作物的生长情况,如土壤水分等,并远程控 制并完成作物的灌溉。在农业自动化灌溉系统中,利用水管水压传感器检测配水 管中水压的大小,进一步控制水泵功率,进而达到有效的节约用水,并且使农作 物产量达到最优的经济效益。
在农业发达的以色列,农民在家就可远程控制农作物的灌溉[15]。利用各种不 同的传感器采集作物的生长信息,例如土壤成分含量、水分湿度以及作物生长的 温度等数据[16]。并通过无线网络将采集的信息传到家里的PC机上,然后结合已 经建立的数学模型对作物进行远程操作,在灌溉时间和灌溉用水量上做到科学合 理的控制[17]。
为了提高我国农业灌溉技术的发展,加快我国农业现代化发展的速度,我国 各级部门也做出了巨大地努力,比如鼓励高校加大对农业灌溉技术的科研力度, 学习国外先进技术和购买国外先进设备等,但基本处于科研试验阶段,很难做到 大力推广。再加上各地的自然环境和农作物的差异,并没有在全国获得普及。我 国也有一些自主研发的自动化灌溉系统,但是由于一次性投入的成本过大,大多 数农民在经济上望而却步,极大的限制了自动化灌溉系统的发展。
1.3 课题研究意义
目前,我国在农业自动化灌溉中投入了大量的资金和设备,但由于没有做到 良好的信息交互,这些设备的价值没有完全体现出来。在现场实地操作的工作人 员,不能实时地掌握农田灌溉系统管理中心的信息,导致农民在作物灌水作业时, 需要多次与灌溉管理中心和现场操作人员进行沟通,给农民的生产带来了极大地 不便。
本文提出了一种基于 Android 和 Web Services 技术的农田灌溉信息管系统, 农田灌溉管理局通过现场勘察人员的实地勘察,掌握农作物的生长情况,并对所 管辖地区的农民提出相应的作物灌溉意见和安排。农民根据农田灌溉管理局的意 见,按时向农田灌溉管理站交纳水费,管理站根据农田灌溉管理局的意见开取相 应的凭证,并将数据录入数据库。在农田现场,农民向现场配水操作人员出示缴 费凭证,配水操作人员通过移动手机 App 查询缴费情况,完成作物的灌水。农 民也可以直接向现场配水操作人员缴费,现场配水操作人员通过手机 App 查询 相应的信息,并完成数据的录入,最终完成配水作业。达到到信息的互通和工作 效率的提高。
1.4 论文的主要内容与章节安排
第一章绪论部分介绍了我国农业用水的现状和目前移动互联网的便利性及 国内外在农田灌溉这方面的发展现状,说明设计灌区信息管理系统的必要性和可 实施性。
第二章介绍灌区信息管理系统中所涉及到的相关技术,如移动通信技术、 Android 技术以及 Web Services 技术等。
第三章介绍总体方案的设计。首先提出了灌区信息管理系统的总体需求,分 析和对比各种设计架构。然后根据需求选择和设计出适合本课题的总体架构图。 最后介绍了系统的总体结构框图。
第四章详细介绍了 Android移动终端的设计与实现。根据需求,对移动终端 的功能模块和实现过程做了详尽的介绍。
第五章介绍并完成Web Services服务器端的设计与实现。主要完成Web服务 和数据库等后台的设计,并为Android提供相应的接口,以供Android终端App 调用。
第六章对本设计的工作总结和展望。根据灌区信息管理系统中存在的一些缺 陷进行分析,并在下次工作中得到有效的改善。
第二章 相关技术
2.1 移动通信技术
2.1.1移动通技术简介
移动通信技术从诞生到现在,已经经历了模拟、数字到3G(Third Generation) 的巨大进步[18],目前正向势头强劲超三代或第四代移动通信(B3G/4G)前进[19]。 其发展过程如图 2-1 所示。
1G 模拟通信 2G 数字通信 3G IMT-2000 B3G/4G IMT-Advanced
图 2-1 移动通信通的演进过程图
Fig 2-1 Mobile communication development process diagram
模拟移动通信被称为第一代移动通信,技术种类为 AMPS( advantage mobile phone system,高级移动电话系统),最早出现于美国公共移动通信业务中,随后 在德国、法国、英国等国家也相继研制出类似的公共汽车电话系统[20]。最初的 模拟移动通信的主要表现为:用户少、容量小而且频谱利用率低[21]。由于当时 采用的是分立元件技术,那时的通信设备既占用体积空间大又非常耗能。随着集 成电路和微处理器的发展,模拟移动通信技术也取得巨大成功。但是随着用户的 迅速增多、频谱利用率低、安全性、价格方面以及它只能提供一般语音通讯服务, 不能提供资料传输等缺点,很快被新一代通信技术所取代。
2G 主要分为 TDMA (Time Division Multiple Access,时分多址)和 CDMA
(Code Division Multiple Access,码分多址)[22]。与之前的通信技术相比,其最 大的特点是数字技术。 2G 时代的主要服务依然是在基本通话这一方面,不过已 经实现一些简单的数据传输业务(例如:短信)。第二代移动通信克服了模拟移 动通信的弱点,在语音质量、安全性获得了很大的进步。由于在发展过程中,没 有形成统一的国际标准,用户只能在同一制式的地区漫游,无法做到全球漫游, 当时各个地区的标准主要分为:GSM (Global System for Mobile Communications, 中文为全球移动通讯系统)、D-AMPS、PDC和CDMA。
GSM系统是由欧洲通信特别小组GSM(Ground Special Mobile)研制的蜂窝 系统。它是在 FDMA(frequency division multiple access,频分多址)基础上,采 用的TDMA方式。GSM供的业务是通话业务、数据业务以及提供给用户可选的 补充业务。其中通话业务包括:电话业务、紧急呼叫(移动电话中不一定需要 SIM 卡)、短消、个人商用号码分开。数据业务是通过 GSM 网络,完成文本文 件、图像、消息、传真等的发送。数据传输的速率有三种: 2.4kb/s,4.8kb/s,9.6kb/s。 相对于 1G 通信技术, GSM 的安全性有了极大的提高,网络资源更加丰富,通 话质量也得到了极大的提高。
D-AMPS 与 AMPS (先进移动电话服务)相似,是 AMPS 的数字版本。 D-AMPSIS-136 标准既支持室内又支持室外,这一特性可以极大的满足尤其是在 高层框架结构建筑物中的客户的通信。
PDC 是只适用于日本的制式,它主要是为了和当时日本国内的第一代模拟通 信系统相兼容而制定的D-AMPS。相对于GSM,它的通话质量和网络稳定性都 略显欠缺,特别是在密闭环境内。 GSM、 D-AMPS、 PDC 这三种系统采用的都 是TDMA技术,但它们对TDMA都有各自的解释,所以即便三者都采用TDMA 技术,还是不能相互兼容,做到相互间的漫游。
CDMA 为另一种多址无线通信技术,它既非频分也非时分。它与 FDMA 和 TDMA的多址方式划分示意图如图2-2所示。
HH
FOMA
图 2-2 FDMA TDMA CDMA 的示意图
Fig 2-2 Schematic diagram of FDMA TDMA CDMA
CDMA 的主要通信特点有:
1.容量大。
2.容量配置灵活。
3.通信质量改善。
4.频率规划简单。
5.手机待机时间延长。
6.建网成本下降。
由于第二代数字移动通技术依然不能满足人们对数据业务传输增涨的需求, 人们开始着手3G技术的研究。其中GPRS (General Packet Radio Service,通用 分组无线服务技术)[23,24]和 EDGE (Enhanced Data Rate for GSM Evolution,增强 型数据速率 GSM 演进技术)就是 2G 到 3G 演进的中间技术,也就是人们俗称 的 2.5G。
3G 作为新一代移动网络系统,相对于前两代移动通信技术不仅仅是在网络 传输速度上有所提高,它最大的特点是将当前最流行的无线通信技术互联网进行 有效的融合,形成今天的移动互联网技术。3G手机在通货质量上也有很大的提 高,并且网络覆盖范围和灵活性也得到较大的改善。除此之外, 3G 手机还提供 了无线多媒体业务,其中视频电话就是3G手机的主要特点之一,人们可以通过 3G 手机进行视频会议等。 3G 技术在全世界主要分为 CDMA2000、 WCDMA、 TD-SCDMA。这里的TD-SCDMA为我国研发的技术。在以上三种技术中,其中 CDMA2000 采用的标准是 MC-CDMA, WCDMA 采用的标准是 DS-CDMA, TD-SCDMA 采用的标准是 TDD-SCDMA 。 TD-SCDMA 的全称是 Time Division-Synchronous Code Division Multiple Access,时分同步的码分多址技术, 是我国自主研发并被ITU接受的3G技术。它能够实现城市或大学等人口密集区 提供高密度大容量通话、数据传输和多媒体等业务。既可以单独运营来达到 ETSI/UMTS 和 ITU/IMT-2000 的要求,又可以与其它无线技术相配合。 WiMAX 是继前三种技术之后的另一项3G技术,它能够提供更高的传输速率,最高可达 到30M的传输速率,传输距离更远(50km),覆盖面积是3G发射塔的10倍。 正是由于这一系列的优势,使得WiMAX迅速引起了个大厂商的兴趣。
2009 年工信部向我国三大运营商发布 3G 牌照,标志着我国正式进入了 3G 时代。
4G是目前新一代的移动通信技术,其传输速度可以达到普通家用宽带ADSL (4 兆)快 25 倍。这种高网速能提供流畅的视频、电话会议等几乎人们所有的 服务的需要,具有不可比拟的优势。不过4G移动通信系统由于采用扁平的网络 架构,不能继承3G网络中软切换这一优势[25]。
ITU 于 2012 年通过的标准包括: LTE-Advanced: LTE (Long Term Evolution, 长期演进)的后续研究标准;Wireless MAN-Advanced(802.16m): WiMAX的后 续研究标准。 TD-LTE 是由中国移动联合其它通信公司共同研制并制定的 4G 标 准[20]。工信部于2013年12月4日向我国三大运营商颁发4G牌照,正式标志着 我国进入了 4G 时代。其中中国移动一共拥有 130MHz 频谱资源,分别为 1880-1900MHz、2320-2370MHz、2575-2635MHz;中国联通获得 40MHz 频谱资 源,分别为2300-2320MHz、2555-2575MHz;中国电信获得40MHz频谱资源, 分别为 2370-2390MHz、 2635-2655MHz。
2.1 .2本文采用的移动通信技术
目前,我国已经进入4G时代,但是由于4G网络覆盖和资费高以及LTE终 端设备当前有耗电量太大和价格昂贵的缺点,导致 4G 的应用还不是相当普及。 本文的农田灌溉信息管理系统主要是进行一些简单的数据传输,最大也是对照片 的传输,在传输数据时, 3G 网络足以满足要求。考虑到上述原因,本文主要采 用3G和2G网络实现。
2.2Android 技术
2.2.1Android 简介
随着3G网络的普及,4G技术的迅猛发展,以及硬件运算速度的不断加快, 再加上各种 APP 的便利性,智能手机逐渐走入了人们的日常生活,使得手机不 再仅仅是一部手机,更像一台电脑。人们可以在手机上实现以往不能实现的功能, 比如说E-mail、网页浏览、视频播放、照相摄影以及电子地图等。手机里的各种 功能给我们带来无比的便利,我们从目前的手机销售数量上可以看到人们对手机 的需求性。通信资费的持续降低、云技术的不断发展、互联网已经变的唾手可得, 在这种大背景下,智能手机终将成为人类生活中的一个不可或缺的工具。而在智 能手机中,Android系统已经成为大多数手机的追寻者,并且由于其开源的特性, 大大地降低了手机的使用成本[25]。如今,移动设备的操作系统包括:Android、 iOS、Firefox OS (谋智)、YunOS (阿里巴巴)、BlackBerry (黑莓)、Windows phone (微软)、symbian、Palm、BADA、Windows Mobile> ubuntu。其中 Android 和 苹果的iOS表现的最为突出,但是Android又具有许多iOS没有的优势[26],通过 图 2-3 的对比我们便可了解。
Android iPhone
可以在PC、MAC和Linux下开发 只能在MAC下开发
以Linux为基础 以Mac OS基础为
Java ObjectiveC
25美元 每年99美元
可以通过WEB下载应用程序 只能在App Store下载应用程序
支持Flash 不支持Flash
Google、ARM、高通、三星... Apple
超过5000000个应用程序 超过1000000个应用程序
图 2-3 Android 与苹果的对比图
Fig 2-3 Android vs iPhone
从上图可知,无论在开发环境还是开发成本以及适用范围, Android 都优于 iOS,并且基于Android开发的应用程序远远多于iPhone的iOS开发的应用程序[27]。 所以本文在灌区信息管理系统的移动终端选择 Android。
2.2.2Android 的概念
Android 一词的本义指“机器人”,最早被安迪•鲁宾制作成为手机操作系统[24]。 它是一种以 Linux 为基础并且以 Java 语言为开发工具的操作系统[28]。它不仅应 用于手机、平板电脑,随着越来越多的智能电子产品的出现,已经广泛应用于如 智能手表、智能电视,甚至还用于汽车车载等其它一些移动设备[29]。Android操 作系统是基于 Linux 的开放核心架构[30],对于硬件设计制造充满弹性,自 2007 年公布到现在,深受世界各地的手机制造商的支持,结合最新处理器及其配件, 不断地推出各种智能手机,并且依照功能和价格提供消费者更加多样化的选择。 Android 有别于其他开发平台,其应用程序的开发资源的获取方式非常简便,相 关工具均可从互联网上获取,并且适用于 Windows、 Linux、 Mac 等主流操作系 统[31],不受操作系统的限制,开发者只要使用 Java 语言就可以投入程序的编写 [32],再加上标准架构类库函数的调用与系统的互动,在降低设计与调试复杂度 的同时,也免除了许多非必要的工程负担。
2.2.3Android体系结构
Android其本质就是在标准的Linux系统上增加了 Java虚拟机Dalvik,并在 Dalvik虚拟机上搭建了一个JAVA的应用框架,开发人员开发程序时,即是基于 该框架[33,34]。
Android 不仅可以运行在 ARM 平台上,还可以在 Windows、 Mac、 Linux 和 Chrome OS 平台上。
Android分为四个层,包括应用程序层(Applications)、应用程序框架层 (Application Framework)>系统运行库层(包括程序库和Android运行库)和 Linux核心层(Linux Kernel) [35,36]。它们之间的关系如图2-4所示:处于最上层 的 APPLICATIONS> 第二层的 APPLICATION FRAMEWORK 和 ANDROID RUNNTINME的Core Libraries是用Java语言实现的,Dalvik主要是负责运行Java 程序的虚拟机,LIBRARIES部分使用C/C++语言编写的程序库,Linux Kernel 部分为Linux内核,在Application Framework之下,由C/C++的程序库组成,通 过 JNI (Java Native Interface,java 本地接口)完成从 Java 到 C/C++ 的调用。
图 2-4 Android 的体系结构 Fig 2-4 Android structure diagram
1.Linux Kernel
Android 内核是基于 Linux 2.6 内核增强版本,它隐藏和屏蔽底层细节,并为 上层服务,做到高内聚、低耦合特点。使得 Android 开发人员不需要知道 Linux 内核,就可以轻松开发 Android 应用程序。 Android 提供了许多核心驱动[37],包 括:
(1)Binder( IPC, inter-process communication) Driver :它是基于 OpenBinder 框架的一个驱动,主要用于提供Android平台中进程与进程间的通讯。
(2)Power Managerment :电源管理。
(3)Low Memory Killer:低内存管理器,相对于Linux标准的OOM (Out Of Memory),Low Memory Killer 表现的更加随意自由。它可以根据需要,自动的 杀死一些线程。
(4)USB Driver: Android 的 USB 驱动是基于 gaeget 框架的。
(5)Android Log: Android Log是一个轻量级的日志设备,用于记录Android 系统在运行过程中的各种日志。
2.Android Runtime
Android Runtime 包含一个核心库和 Dalvik 虚拟机。
Android 核心库实现了 Java 标准部分的大部分内容,主要包括: Java 标准 API、Java扩展API、企业和组织提供的Java类库。
Dalvik虚拟机:一种基于寄存器的虚拟机,正是由于该特点使得Android上 的一些应用程序,尤其是经过虚拟机编译后变大的,运行起来会相对流畅。不过 在未来,谷歌将删除Dalvik,用ART代替。
3.Libraries
这里是一些C/C++类库,通过Application Framework暴露给开发者。下面是 一些核心类库:
Surface Manager :界面管理。
Media Framework:基于PacketVideo的OpenCORE。这些库支持播放和录制 许多流行的音频和视频格式,以及静态图像文件。
SQLite: 一种轻型数据库。
Webkit:是一个开放源码的自由软件,可以驱动Android浏览器。
SGL:基本的2D图形引擎。
FreeType:位图和矢量字体渲染。
3D库:基于OpenGL ES 1.0 APIs的实现,开发人员可以通过该库函数开发 出许多炫丽的游戏。
4.Application Framework
Application Framework包括一般Android应用程序所需要的所有基本功能以 及这些功能的接口。利用Application Framework,开发人员可以根据自己的需求 开发出许多功能各异的APP[38]O Android其实为开发人员提供了许多相应的框架 的API,开发人员可以根据手机的性能和硬件具备的传感器等功能进行开发,为 编程人员开发程序提供了极大的方便。任何程序的某些功能模块只要不违反 Android 的安全规定,就可以被其它任何程序所所调用。比如说,如今很多应用 程序都可以调用微信软件的朋友圈功能来完成对本产品的宣传。每一个框架都是 一组服务和系统, Application Framework 包括:
(1)视图( View)
(2)内容提供者(Content Providers):通过该方法可以实现各个应用之间的数 据共享。
(3)资源管理器(Resource Manager):提供非代码数据的查看。
(4)通知管理器(Notification Manager):开发者可以通过该模块自定义警告, 并且可以将自己的需求在通知栏展示出来。
(5)活动管理器(Activity Manager)o
5.Applications
Android系统已经集成一些主要的应用程序,包括E-mail、通讯录和其它设置。所 有应用程序都是用 Java 开发并且我们可以根据自己的需求去开发自己的软件。
2.2.4Android 的基本组件
Android 四 大 基 本 组 件 分 别 是 Activity , Service,Content Provider , BroadcastReceiver。这些组件都需要在 AndroidManifest.xml 中注册。Activity, Service, Content Provider, Broadcast Receiver 与 AndroidManifest.xml 之间 的相互 关系可以用图2-5表示。如果某个组件没有在AndroidManifest.xml进行注册,该 Activity> Service> Content Provider> Broadcast Receiver 所包含的内容和功能等, 将不会被 Android 系统可见,当然也就对应用程序来说也是没有意义的。 BroadcastReceive 有两种注册方式,其中一种是在 AndroidManifest.xml 中进行配 置,这种方式与其它组件的注册相同,由于这种方式是在程序运行之前用人工方 式进行配置的, 所以叫做静态注册;另一种方式动态注册, Context.registerReceiver(),用这种方式注册的 BroadcastReceive 类是一个匿名类。 用第一种方法注册的 BroadcastReceive 会与系统的启动而启动,一直保持活跃状 态,即使程序还没有运行。
图 2-5 Android 的构成及其关系
Fig 2-5 The composition of Android and their relationships
AndroidManifest.xml: AndroidManifest.xml 是应用软件的资源文件,有一点 像C++中的.rc文件,该文件中列出了各种Activity> Server及其权限,还有一些 监听接口。比如添加一个Activity时就需要对该文件进行配置,或是应用程序需 要访问网络时,也要对其进行配置。 AndroidManifest.xml 文件中进行注册格式如 下:
<activity>元素用于声明Activity子类,如果是程序初始化界面,也需要在属 性中进行声明。
<service>元素用于声明服务。
<provider>元素用于声明内容提供者。
<receiver >元素用于声明广播接收器。
Activity:打开Android手机的应用程序,我们看到的每一个屏幕就是一个 Activity。 Activity 主要负责应用程序门面的修饰,美化桌面,同时也负责应用程 序中一些主要数据信息的显示。Activity通过一些控件(如:EditText、TextView、 Button、Menu)显示在屏幕上,并且这些控件通过监听等方式对响应用户事件, 最终做到信息的人机交互。
Activity 与 Activity 之间的通信是通过 Intent 中 startActivity(Intent intent)方法 进行的。它包含有7个生命周期函数,其Java代码如下。
public class Activity extends ApplicationContext {
protected void onCreate(Bundle savedInstanceState);
protected void onStart();
protected void onRestart();
protected void onResume();
protected void onPause();
protected void onStop();
protected void onDestroy();
}
这7个函数Activity生命周期中的关系如图2-6所示。在当一个Activity正 常启动时会依次调用 onCreate()fonStart()—onPostCreate()fonResume()f onPostResume()。当一个 Activity 转向另一个 Activity 时为 onPause()—onStop()。 按机器返回键, Activity 从另 一个 Activity 返回时, 依次调用 onRestart()—onStart()—onResume()—onPostResume()。按机器返回键,转向上一 个 Activity 时,依次调用 onPause()—onStop()—onDestory()。当屏幕变黑,进入 待机状态时会调用onPause()。屏幕变亮时,会依次调用待机状态前Activity的 onResume()—onPostResume()。Home 键退出时,依次调用 onPause()—onStop()。 Home 键导航返回时,onRestart()—onStart()—onResume()—onPostResume()。旋 转 屏 幕 时", onPause()f onStop()f onDestory()f onCreate()f onStart()— onPostCreate()—onResume()—onPostResume()。
图 2-6Activity 生命周期函数
Fig 2-6 The Activity lifecycle function
Service: Service 虽然在 Android 里不像 Activity 一样被用户看到,但它却承 担着大部分数据处理的工作,它在Activity中占的时间很长。比如说:在一个收 音机应用程序中,包含多个Activity,客户可以根据自己的需要进行音量的调节、 是否录音、频道的选择以及定时器的设置等。但是收音机主要是为了听,所以在 软件的使用中,大部分时间屏幕是可以保持黑屏的待机状态从而避免屏幕开启时 被误操作并且可以达到节能效果。用户在收音机播放时,可以选择锁屏和屏幕切 换到其他应用程序继续运行。这时收音机的Activity会通过Context.startService() 方法启动Service,进而达到收音机在后台运行的效果。Android系统会将新启动 的Service 一直执行到结束。系统也可以调用Context.bindService()方法,绑定一
个Service。比如,收音机中通过“摇一摇”的功能进行进行更换频道。
Service 有两种使用方法:
方法一,调用 Context.startService()方法启动,对应 Context.stopService()方法 结束。
方法二,调用 Context.bindService()方法建立,对应 Context.unbindService() 方法关闭。
所以Service的生命周期图分为两种,如图2-7所示:
图 2-7 Service 生命周期图
Fig 2-7 The cycle of Service life
Content Provider: Content Provider 主要负责数据的存储,并允许一些应用程 序对其进行访问,从而达到数据共享,比如:微信、易信及飞语等通话软件都可 以对手机中的通讯录信息进行读取。这些数据可以存在于SQLite、文件系统中 或是其它合理的地方。Android可以通过自带的Content Provider实现数据管理的 任务,比如:音频、视频、通讯录的数据。
Broadcast Receiver: Broadcast Receiver 是一种全局监听器,它只能接收广播, 并对广播的通知做出反应。如:短信、微信、电池电量不足或者用户改变了语言 偏好等。Broadcast Receiver与Service 一样不提供图形化用户界面,但是当用户 有新的通知或信息时,它可以调用其它组件如Activity通知使用者。
2.3Web Services 技术
2.3.1Web Services 简介
Web Services 是实现 Web 服务的一种技术, Web Service 是通过 Web 提供的 一种服务[39]。关于Web Service的定义有许多种,其中万维网联盟(World Wide Web Consortium,简称 W3C)组织这样定义 Web Service: Web Service 是一个软件 系统,该系统是一个用XML语言(尤其是WSDL语言)描述的URI (Uniform Resource Identifier统一资源标识符,简称URI)定义的软件系统[40]。用URI描 述的定义可以被其他软件系统发现,并且通过这些定义,软件系统之间可以进行 相互交互,并且借助互联网做到信息的交流。
通过Web Services技术,位于各个PC终端或移动终端的应用程序不需要额 外的、特定的软件或硬件,即可实现信息的交流和操作[41]。基于WebServices的 服务器端定义出一些资源让客户端应用访问并获取资源[42,43]。 WebServices 最大 的特点是不仅可以跨平台、而且还可以跨语言交互,比如一个用java[44,45]编写的 应用程序和一个用.net编写的应用程序可以通过WebServices实现数据信息的交 互[46]。 Web Services 是基于一些如 XML、 HTTP 等标记语言的一门技术,由于这 些语言都比较通用,使得它在部署时显得也非常方便。
当一个公司的新旧业务之间使用不同的平台或语言描述,或是不同公司的应 用间需要进行数据信息交互时,Web Services是一项非常好的技术。比如说360 导航、好 123、 Google265 等网站都会有天气预报的信息,并且这些网站提供的 信息除了在表现形式上有所不同外,内容是相同的,这些网站其实就是调用气象 局服务器暴露的一些接口实现信息的发布。各个门户网站的财经栏目中的股票行 情信息也是同样的道理。如图 2-8 为购物网站与物流公司的一种信息的交互,它 们之间不再是简单的用HTTP进行信息的交互,而是用WebServices实现,不仅 跨平台,而且跨越了编程语言。购物网站不需要自己也保存物流信息,只需要调
用物流公司服务器提供的接口即可。
图 2-8 Web Services 在不同公司间的应用
Fig 2-8 Web Services application structure between different companies
2.3.2Web Services 主要技术
为了实现客户端与服务器之间数据的正确传输,就需要建立一套统一的接口
标准, Web Services 已经有一套完整的协议规范,如图 2-9 所示:
L
F s
W 流
务 HR 服 安全 管理能力 服务质量
现 发 务 HR 服
布 发 务 HR 服
L
W 述现口 描实接 务务务 HR HR HR
P
S 性
a e
c
s
ML
X 型 模 据 数
血 示 显 据 数
输 传 据 数
图 2-9 Web Services 协议栈
Fig 2-9 Web Services protocol stack
从Web Services协议栈可以看出,WebServices基本技术主要包括为:
l.XML(Extensible Markup Language)可扩展型标记语言是由W3C创建,它主 要是面向时间短的临时数据处理,面向万维网络,是SOAP[47]的基础。XML具 有良好的扩展性,和机构化特性,做到了内容和数据分开描述, XML 还有一个 最显著的特点是,它摆脫了平台和厂商的限制并且它克服了 HTML不能满足Web Services 自动操作数据的需求。
2.SOAP : (Simple Object Access Protocol) 简单对象存取协议,是 SOA (Service-Oriented Architecture,面向服务架构)的实现协议[48]。包括:请求消 息和响应消息,它是依赖于WSDL文档的定义。Web Services通过标准通信协议, 在互联网上发布有用的程序模块(以服务的方式),目前大部分是用 SOAP 作通 信协议。基于Web Service传输数据的服务器和客户端,两者之间的请求和相应 过程都都是通过SOAP消息进行的[49]。很多大公司比如微软会根据自己的需求, 开发出一套符合自己的专有的方案,不过它们都是必须符合SOAP规范[50]。
3.WSDL: (Web Services Description Language)是 Web Services 描述语言,充 当SOA的服务契约。它是一种接口定义语言,对应一种以“.wsdl”为后缀的文 件,一个 Web Service 对应一个唯一的 WSDL 文档。该文档定义了 Web Service 服务器和客户端应用程序之间相互交传递请求和相应数据的格式和方法。 WSDL 也是基于XML的,这样方便开发人员的操作,我们既可以通过人工的方式阅读, 也可以借助计算机程序解析,加快了开发者的效率。不仅如此,我们还可以通过 软件自动生成WSDL文档。WSDL基本包括元素:
Type:消息类型,定义数据类型(如string> int)。
Message:消息,通信数据的抽象类型化定义。
Part:消息参数
Port Type :端口类型。
Binding:特定端口类型和数据格式规范
Port :定义为绑定和网络地址组合的单个端点。
Service :相关端口的集合。
Operation:操作。
WSDL 支持4 种消息交换方式:
单向(One-way):服务端接收消息。
请求响应(Request-response):端点接收并发送相应消息。
要求应答(Solicit-response):端点发送并接受相应消息。
通知(Notification):端点发送消息。
4.UDDI(Universal Description, Discovery, and Integration) 是由 OASIS (Organization for the Advancement of Structured Information Standards )标准化组 织制定的一种基于XML和SOAP的协议。其中XML的作用主要是对数据进行 封装,SOAP规范注册信息。通俗的讲,UDDI类似于手机通讯录,手机通讯录 中存储的是每个人的手机号码等信息,而在UDDI中存储的是Web服务的信息。 UDDI目录包括三个部分:白页(White Paper)>黄页(Yellow Paper)>绿页(Green Paper)。
Web Service 一般分为.Net版和Java版,我们主要用Java版的WebService实 现灌区信息管理系统服务器部分。
第三章 系统的总体方案设计
3.1 系统背景
灌区信息管理系统主要是为灌区灌溉系统服务,所以有必要了解一下农田灌 溉系统的组成部分。用通俗的话讲,灌区就是由水库、渠、农田、作物组成的一 个结构体,灌区灌溉管理系统就是针对该结构体进行有效管理的组织,它是基于 某一流域的水资源管理机构,主要负责水资源的合理调配。主要采用的方法是市 场调节。目的是解决我国水资源短缺与灌溉效率低下的矛盾。灌区灌溉系统的组 织结构图如图 3-1 所示,整个系统的组织结构由上到下分别为:决策层、管理层 和操作层。
图 3-1 农田灌溉管理系统的组织结构图
Fig 3-1 Irrigation district organization chart
灌区管理局属于决策层,主要负责对所管辖范围内的农田浇灌作业进行统一 的规划和安排,其中包括:了解该地当年的气候和天气状况,调查当地农作物的 种类和生长状况以及土壤的水分信息等,合理计划灌水量和灌水时间表,为农户 的农业用水提供科学的意见。
灌溉管理站属于管理层,主要工作为:根据灌区管理局提出的安排和意见并
结合农民的需求,进一步为农民的用水量提出意见,以及负责水费的征收,并将 信息通知现场灌溉配水操作人员,以及对灌溉配水操作人员进行统一的安排和管 理。
灌溉操作人员主要是负责完成农田现场的配水操作过程,接受上一级的命令, 完成现场灌溉配水作业。
实地调查人员,接受上层(灌区管理局)的安排,对农作物的种类和生长状 况、土壤湿度以及浇灌的情况进行调查,并将调查所收集的数据反馈给灌区管理 局作为参考。
3.2 需求分析
3.2.1业务需求分析
在整个灌区配水过程中,灌区管理局通过实地调查人员掌握农户用水情况, 并制定浇灌作业计划,最后灌区管理局将作业规划下发到灌溉管理站。灌溉管理
站接受上级(灌区管理局)的安排,根据实际需求将灌区进行划分,并为每一个
图 3-2 灌区配水过程
Fig 3-2 Irrigation water distribution process
由上图可知,用户的农田浇灌用水可以通过两种方式获取:一种方式是直接 向灌溉管理站购水,用户需要向灌溉管理站提交相关资料,包括个人信息、所有 人的农田信息以及个人用水申请等信息,灌溉管理站的工作人员根据用户上交的 资料并结合上级灌区管理局的决策意见做出最终决定,决定是否批准购水申请并 完成水费征收等操作。用户向配水操作员工出示缴费凭证,配水操作员工核实无 误后完成配水工作。但是这一种方式比较繁琐,用户需要经过多个地方才能完成 配水浇灌工作。另一种方式是用户直接向灌溉配水操作人员购水,灌溉配水操作 人员根据用户的请求向上级(灌溉管理站)汇报情况,如果上级同意,进行现场 收费并完成配水工作,否则不予执行。但是这种方式的前提是灌溉管理站需要提 前掌握用户的信息情况,所以该方式需要数据库系统和软件的支持。
在上述的购水过程中,无论采用何种方式,都涉及到水票。水票的作用即是 作为用户的购水凭证。在传统的购水过程中,灌溉管理站需要开具三份购水凭证, 分别属于购水人、灌溉管理站以及配水操作人员所有。购水人主要是通过水票向 配水操作人员证明自己已经缴纳水费以及购水量等信息。灌溉管理站使用购水凭 证主要是用于留底和财务计算。配水操作人员使用购水凭证的主要目的是为了和 购水人的水票信息进行对比,从而证明购水人的水票信息是否属实。在购水过程 中,该软件系统要实现以下目的:
当用户采用方式一购水时,灌溉管理站为购水人提供纸质水票,并将相应的 购水记录录入服务器数据库,一方面供灌溉管理站自身使用,另一方面供配水操 作人员使用移动终端 APP 验证查询使用。当用户采用方式二购水时,水票由配 水操作人员提供,配水操作人员通过移动终端 APP 向购水人开具电子水票,同 时将购水信息记录于服务区数据库中,供灌溉管理站和配水操作人员自己查询。 并且,当用户在配水过程中发现水票余额不足时,可以在农田现场采用方式二直 接向配水操作人员完成续费。
软件需要实现的另一目的就是保证各方利益,即保证用户、灌区及配水操作 人员三者之间的利益。在传统的配水过程中,常常出现以下现象:
当配水操作员工按照要求完成对农民的配水工作,有时会出现农民的抵赖现 象,导致在很长一段时间之后,配水操作员工无法拿出有效的证据来证明自己的 工作,导致配水操作员工的利益得不到保障。另一方面,配水操作员工为了自己 的利益,在配水过程中出现一些舞弊现象。比如说,配水操作员工根据自己的意 愿,随意的调乱农民的配水顺序,导致农民的利益得不到保证。或是,配水操作 员工为了自己的利益,为没有缴纳水费的农民进行配水,这时损害的是灌区灌溉 管理系统的利益。为了解决以上问题,软件系统主要使用拍照功能,并且配水操 作员工不进行拍照时,不能进行配水工作,配水工作完成后,必须再次进行拍照。 此时,移动终端只能进行照片的一次性上传,不能对已上传的照片进行修改,这 样做的目的是防止配水操作员工的舞弊行为,保护灌区和用户的利益。
3.2.2系统需求分析
根据业务需求分析,灌区信息管理系统主要包括配水操作人员的 Android
App 部分和服务器端提供信息的查询系统,简称移动终端和服务器。
1.移动终端
移动终端主要是利用手机的无线网络收发功能,实现配水操作人员随时随地 向服务器查询系统提交和查询相关信息,做到真正的移动化办公。在移动终端实 现的功能主要包括:
(1)查询功能。查询功能主要有用户信息查询(包括:用户ID、用户姓名、 性别、联系方式、家庭住址、对应农田信息的编号、用水状况记录)、用户购水 信息查询(也可以叫做水票信息查询,包括购水人姓名、购水时间、购水单价、 购水量、总价、预计放水开始时间、预计放水结束时间)、农田信息查询、农田 土壤信息查询(比如说土壤湿度信息)、渠道放水量信息查询、灌区流量查询、 降雨量信息查询以及灌区水位信息等。
(2)信息提交功能。信息提交功能主要为购水信息提交、现场审核和完成用户 的用水申请、图像采集、农田信息上传(土壤信息、湿度、农作物信息)。其中 图像采集的功能主要是用于解决配水过程中的纠纷,也是作为配水操作人员的工 作成果。为了保证数据的原始性和可信性,存放图片的数据库只支持移动终端对 其进行插入和查询操作,不允许进行修改和删除等操作。
(3)用户通知功能。该部分的功能主要是完成购水用户的通知。
(4)网络设置。主要包括一些网络参数设置。
2.服务器
服务器系统提供基于Web Services的数据查询功能和数据库信息的管理功能, 为移动终端的App提供接口,供App实现数据的交互。最终做到响应移动终端
的信息查询、接收移动终端提交的信息、数据库的设计。
(1)响应移动终端的信息查询。该部分必须与移动终端的查询功能一一对应。
(2)接收移动终端提交的信息。主要包括购水信息提交的处理,农田信息提交 的处理、
(3)数据库的设计。数据库主要包括:工作人员信息表、农户信息表、农户购 水记录表、水票信息表、农田信息表、渠道水位信息表、农田降水量信息表等。
在满足以上功能的基础上,尽量遵循以下原则:
在操作方面:尽可能做到操作简单和业务流程的明朗。使每个操作人员刚刚 接触该软件时即能上手操作或是只需简单的学习。
在数据传输方面:在完成各项功能的前提下,尽量做到数据流量不要过大。
日志信息,预防软件在出错的情况下查看。
采用模式设计,尽量将一些常用和可能出现的方法抽象成接口或超类,方便 日后进行系统升级时,避免大量的修改代码,做到高内聚低耦合的原则。
移动终端要尽量做到简单,一些逻辑判断等操作功能尽量由 Web Service 部 分完成。最大化限度地减轻移动客户端运行压力,最终达到软件的稳定运行。
通过该信息管理系统尽量做到:方便配水操作人员查询灌溉管理站的相关信 息,简化用户购水的过程。从而达到农业灌溉的信息化流程,提高工作效率。
3.3 系统的部署
在整个灌区信息管理系统中,服务器端的用户管理模块根据每个用户(此处 的用户是灌区工作人员)的级别分配相应的权限。例如:管理员拥有最高权限, 可以添加和删除用户,并为其他用户设置权限级别。灌溉管理站人员根据上级(灌 区管理局)的决策安排,制定详细的用水计划,并在相应的权限内完成农户用水 的申请以及审核来自配水操作人员在现场的购水工作。灌溉配水操作人员根据系 统分配的账号进行权限之内的操作,比如说根据用户提供的水票进行相应的验证 和帮助用户完成现场购水操作等。
各个部门的工作人员之间的通信主要是依靠移动互联网进行,这样不仅提高 了农田灌溉的效率,还极大地方便了农民的用水过程。系统的整体部署结构如图
图 3-3 系统结构框图
Fig 3-3 System structure diagram
农户不仅可以从灌溉管理站查询农田的用水情况和农田配水计划。农户也可 以根据自己的实际情况和专家的指导意见决定预计配水时间和配水量的大小。农 户的购水申请也可以通过配水操作人员的移动终端完成。配水操作人员也可以通 过移动终端在线验证农户提供的交费证明。
3.4 系统的总体架构
3.4.1各架构的对比
目前流行的应用系统架构主要有C/S和B/S两种[51]。
1. C/S
C/S 即客户机和服务器架构。该架构通常采用高性能的 PC 做服务器,并采 用大型数据库,并且需要制定专门的客户端软件[52]。客户端软件需要完成大部 分业务逻辑判断和UI界面。C/S的架构图如图3-4所示。
图 3-4 C/S 架构图
Fig 3-4 C/S architecture diagram
C/S 架构的优点是:响应速度快,因为该方式将大部分逻辑业务由客户端完 成,较好地利用了客户机的硬件性能;安全性容易保证;界面操作丰富;通信开 销小。
C/S 架构的缺点是:开发成本高;维护成本高。只要客户端的专用软件出现 异常时,就需要专门对其进行重新安装或修复,尤其是一些复杂的软件还需要专 业人员去安装。另外,一旦对系统进行升级时,就会涉及到所有终端软件的升级, 这时消耗的人力、物力也是非常大;用户群固定。只有在PC机上安装相应客户
端软件的用户才能享受其服务,无法面对其它未知客户。
2. B/S
B/S又称Brower/Server模式。客户机上只要安装一个浏览器(Browser),如 Netscape Navigator 或 Internet Explorer,服务器安装 Oracle、Sybase> Informix 或 SQL Server等数据库。浏览器通过Web Server同数据库进行数据交互。服务器 完成大部分的业务逻辑事务,减轻了客户端的压力oB/S架构层次如图3-5所示。
图 3-5 B/S 架构图
Fig 3-5 B/S architecture diagram
由图可知,服务器端不仅在业务逻辑方面添加了压力,还需要有Web引擎与 客户端的浏览器配合。
B/S 架构的优点是:大量的业务逻辑事务放在了服务器,对用户计算机性能 和配置的要求不高;适合工业化大规模生产的要求,因为用户电脑上只要安装有 任何品牌的浏览器即可完成网站的浏览;无需升级多个客户端,只需要升级服务 器即可。
B/S 架构的缺点是:过于标准化的 B/S 前端,同样可以理解成为过于呆板, 这直接导致了 B/S模式下的功能实现没有C/S灵活、方便、美观。虽然诸如Ajax 等技术已经在这方面做了很好的改进[53],但是依然无法达到像3D网络游戏等给 用户带来的视觉享受;在跨浏览器上表现不佳;在速度和安全性上需要花费巨大 的设计成本;客户端服务器端的交互是请求-响应模式,通常需要用户专门去刷
新页面(在Ajax之后,此问题得到一定程度的缓解[54])。
3.4.2本文选择的系统架构
根据以上对比分析,本文采用的是B/S架构基础上灵活采用C/S架构。为了 减少服务器与移动终端通信传输所使用的流量,本系统的移动终端不采用传统的 浏览器方式。移动终端的数据以APP的形式展现,故移动终端APP负责对数据 进行修饰和封装。这样做的好处是,终端用户可以使用自己习惯的数据表现方式。 软件客户端通过Web Service接口完成数据的更新和传输[55],并且不受终端的软 件开发语言的限制(本文的客户端主要是基于Android开发的)。采用支持Android 系统的手机作为移动终端的设备,在Web服务器端提供移动终端APP的调用接 口。系统架构如图3-6所示,其中Web服务器端采用了 MySql数据库。数据库 主要存放用户信息、农田信息、用户购水信息、用户管理等。Android移动终端 和Web服务器端的通信是基于Soap+Http的Web Services技术。Android移动终 端主要是完成用户信息查询、农田信息查询、用户购水的申请、用水记录登记、 图像采集等。其具体实现过程将在后面的章节中作详细的说明。
图 3-6 系统架构图
Fig 3-6 System architecture diagram
第四章 移动终端的设计与实现
4.1 移动终端功能模块
根据需求分析,灌区信息管理系统的移动终端部分,实现的主要功能可以用
图 4-1 表示:
图 4-1 移动终端的模块图
Fig 4-1 The function model of mobile terminal
由上图可知,移动终端主要实现的功能如下:
1.水票验证:验证的信息主要包括水票id号、购水用户、用户对应的农田渠 道号、购水时间、购水量、单价、总价、预计放水开始时间、预计放水结束时间、 水票对应的配水状态。
2.查询数据:移动终端的查询功能主要包括:查询用户信息、查询农田及用 水信息、查询本地区降雨量信息、查询天气信息、查询农田土壤水分等信息。
3.申请购水:灌溉配水人员利用移动终端手机,可以实时为用户申请购水, 并向服务器提交购水信息,灌溉管理站审核该配水人员提交的购水信息,并决定 通过与否。如果通过,则表示购水成功,否则,表示购水失败。其中提交购水申 请时,移动终端需要提交的信息包括:用户信息,农田所属的渠道号和其它农田 基本信息,用水量,预计放水开始时间,预计放水结束时间。
4.图像采集:图像采集的作用主要是证明农田配水前后的状况及对比,如果 将来用户对配水情况有疑问时,可以作为证据保存。采用此功能,移动终端可以 随时将采集到的图像信息上传到服务器,以便服务器端的工作人员查询。
5.短信收发:短信收发主要用于通知农户购水成功信息、通知农户预计放水 开始时间、通知农户交纳水费等。
6.通知用户:该模块主要是用于紧急情况下的农户通知,比如说放水时间已 到,而农户还没有到达农田现场,或者是放水过程中出现意外情况,而农户又不 在现场等。
7.用户管理:主要是用户管理权限和用户密码的设置。注意:只有拥有一定 管理权限的用户才可以为其他用户更改用户管理权限和登陆密码,一般用户只能 为自己修改登录密码。
&网络设置:网络设置主要包括App登录服务器的IP地址和端口号的设置。 主要是在用户第一次登录服务器时或者服务器IP地址、端口号发生变动的情况 下使用。
9.历史数据:该模块首先记录移动终端的每一项操作,比如购水申请、水票 验证以及用户通知等,以流水号的形式,按时间依次记录。其次用户可以进行相 关方面的查询,也可以对一些无用的数据进行删除,也可以设置一个时间点,自 动删除某一时间点以前的所有历史数据,以免造成移动终端因存储空间不足而造 成程序无法正常工作。
4.2 移动终端的操作流程
4.2.1主程序的操作流程
移动终端的操作流程的还是很简单的,用户启动灌区信息管理系统后,首先 系统需要判断是否已经完成网络设置,如果用户还没有完成网络设置,或者设置 的网络参数已经不能登录当前服务器,则需要进行网络设置,否者页面进入不了 登陆页面。如果已经完成网络设置,并且通过服务器的验证,则直接进入登录界 面。进入登录界面,用户需要输入服务器分配给个人的用户名和密码,并通过服 务器端验证才能进入系统的主界面。进入主界面后方可进行权限内的各项操作。 该处,用户无法自行注册用户名,只能用服务器分配给用户的用户名与密码,用 户登陆以后,可以对用户的密码进行修改,或是进行用户权限范围内的相关操作。 系统的主操作流程如图 4-2 所示:
图 4-2 移动终端 App 的操作流程
Fig 4-2 The operation of the mobile terminal App process
4.2.2水票验证的操作流程
水票验证是配水操作人员利用移动终端进行的一项主要操作,用户从主界面 选择“水票验证”按钮进入水票验证界面时,首先需要验证该登陆用户是否具有 水票验证权限,如果该登录用户没有水票验证的权限,则弹出警示框提示“您没 有权限进行此项功能”,程序并终止进入水票验证的界面,返回系统主界面。如 果该登陆用户具有验证水票的权限,则进入水票验证的界面。查询水票时,需要 输入水票ID号和相关验证信息(本文选择验证信息是水票对应的购水农户的姓 名)。如果输入的ID号和对应的验证信息不正确,则查询失败,移动终端显示“您 输入的ID号不存在或则ID号和验证信息不匹配”,界面返回输入ID号和对应 验证信息的界面。如果输入的ID号和对应的验证信息正确,则可以查询水票相 关信息。水票验证的操作流程如图 4-3 所示:
图 4-3 水票验证流程图
Fig 4-3 The operation process of water tickets authentication
36
4.2.3申请购水的操作流程
在农田现场帮助农户完成申请购水是配水操作人员利用移动终端进行的另 一项主要的操作,也是本系统的主要特色。用户从主界面点击“申请购水”的按 钮进入申请购水界面时,首先服务器需要验证该登陆用户是否具有申请购水的权 限,如果该登录用户没有申请购水的权限,则弹出警示框提示“您没有权限进行 此项功能”,程序终止进入申请购水的界面,返回系统主界面。如果用户具有申 请购水的权限,则进入申请购水的界面。用户购水时,需要详细填写购水相关信 息,比如说购水人姓名、农田所属的渠道号、农田土壤水分、农作物信息、用水 量、预计放水开始时间、预计放水结束时间。申请购水的操作流程如图4-4 所示:
图 4-4 申请购水流程图
Fig 4-4The process of application for water
4.3移动终端软件的结构
在灌区信息管理系统中,本文将各种类型的类都放在相应的包结构之下,一 方面防止类的重复命名,另一方面也可以很清晰地了解整个项目的框架[56], Android 中的包结构如图 4-5 所示。
“信 IrrigationlnformationSystemC
J 鍔 src
0 corn.exarnple.irrigationinforrnationsystemc
0 田匸om.example.irrigationinformationsystemc.dao
0 田 corn.exarnple.irrigationinforrnationsystemc.rnodel
0,扭 com.example.irrigationinformationsystemc.util5
0 逊 gen [Generated」ava Files]
Android Private Libraries
assets
bin
libs
res
An droid M a nife st>::m I
團 ic_l自uncher-web.png
Ul p ro g u a rd - p roj e ct.t:-:t
[B| p roj e ct.p ro p e rti e 5
图 4-5 Android 中的包结构
Fig 4-5 The application of MVC in Android
irrigationinformationsystem 包的主要是一些控制类,它包含了项目中的所有 Activity。
irrigationinformationsystem.dao 数据持久层,主要负责数据的存储访问。
irrigationinformationsystem.model 绝大多数的业务类放在该包下。
irrigationinformationsystem.utils 是个工具包。
另外 res 文件夹主要存放一些视图控制类的文件。由图 4-6 可知,在 Layout
文件下,每一个.xml文件都对应着一个activity。
fl ctivii?r'_m a i n ^-::rn I s re a_ra i nfs II .::■:: rn I b uy_wate r>::rn I ch n & l_fl o Vu->::rri I ch a n e l_i nf o ■>::rn I ch a n e l_war_l eve I ■>::广厂11 ch e ck_ti cket_i n p ut^-::rn I ch e ck_ti cket^:-::rn I fa rrn I s n d_i nfo .::■:: rn I his tc> n/_d ata ■>::广厂i 丨 info rrri_u s e r>::m I login ^:-::rn I logo ut>:<rn I n et_par_s st^-::rn I q ue nr'_d ata >::rn I te::-:±_u s e r>::rn I ti ck et_i nfo >::rn I use r_i nfo ^-::m I use r_rn gt^:-::rn I we I >::m I
图 4-6 Loyout 文件下的结构
Fig 4-6 The corresponding relation of View and Controller in Android
4.4 移动终端的实现
4.4.1开发环境的配置
4.4.1.1 软件需求
Android 开发环境相关的软件包括:操作系统的类别和开发工具。
操作系统:基于Android的开发对开发平台的操作系统没有特殊的要求,无 需特定的操作系统。支持开发Android应用程序的操作系统的版本有很多,包括 Windows XP、 Windows Vista、 Windows 7。
Java Development Kit (JDK):在这里必须正确的安装JDK,不能简单的只 安装JREo其实JRE包含于JDK中。其中JDK的版本要求是JDK 5或JDK6或 者是更高级别的版本。
Eclipse: Eclipse 是一款由 IBM 开发的开发平台软件,该软件功能特别的强,
最后 IBM 又将其捐赠供世界各地的开发人员使用[57]。经过全世界各地的开发人
员的大力配合,Eclipse已经有了多种程序语言的版本,包括:Java、C/C++、PHP、
Software modeling、 Ruby, Python、 telnet 等等。只要开发出相应的插件,理论
上是没有语言限制的。不过程序写出来以后,要有相应的语言环境支持。在这里, 我们需要的版本是 “Eclipse IDE for Java Developer, version:4.2.0"。它由 Eclipse Project、Eclipse Tools Project、Eclipse Technical Project 和 Eclipse web 工具平台项 目等组成,为Java开发人员提供了一个自由、多平台的开发环境。广大Java开 发人员认为 Eclipse 与 Java 语言配合得天衣无缝。
Android Development Tools(ADT)plugin for Eclipse:ADT 是 Android 在 Eclipse 上的开发工具。在 Eclipse 编译 IDE 环境中安装 ADT, 为 Android 开发提 供开发工具的升级或者变更。它作为Eclipse的一个插件,必须与Eclipse 一起运 行。
Android Software Development Kit(Android SDK) :Android SDK 可以理解为 Android 专属的软件开发工具包,包含许多 Android 程序开发资源,比如:链接 库、程序除错工具、AVD (手机模拟器)等。
4.4.1.2 开发工具的安装步骤:
1.安装 JDK
JDK是Java的必备工具,一般编写过Java程序的计算机都已经安装好了 JDK。 如果不确定计算机中已经安装的JDK版本,可以通过执行Windows的“控制面 板—■添加或删除程序",找找看是否有一项叫做Java SE Development Kit (以前 的JDK版本名称叫做Java 2 SDK,SE)的选项。如果通过这一步骤能找到,说 明该已经在该计算机上安装好了 JDK(不过版本必须是JDK5、JDK6或者以上), 这样就可以直接进入下一个步骤。如果通过这一步骤找不到JDK或JDK的版本 比JDK5或JDK6低,就需要先将就以前的JDK版本先删除掉,然后按以下方法 安装新的JDK。该方法如下:
首先,通过启动浏览器,在浏览器地址栏处输入以下地址,或是利用百度搜 索 JDK 再从百度网页上选择以下地址:
http://www.oracle.com/technetwork/java/javase/downloads/index.html
通过该地址会从浏览器上看到如图4-7的网页,并点击Download JDK按钮 进入下一个页面,从页面中找到如图4-8的表格(Platform),选择合适本机操作 系统的版本(本文选择的是Windows x64),接着在单选框中点击“Accept License Agreement”,该选项必须选择否则无法下载。接着进入下载页面框,选择好下载 路径并开始下载。然后将下载好的文件进行安装。
图 4-7 Java 官网下载 JDK
Fig 4-7 Java's official website to download the JDK
Product i File Description File Size
1_35.24 MB ± jdk-8u31-linux-i586.rprT)
154.91MB ± jdk-8u31-linux-i586.tar.gz
135.62 MB 至 jdk-8u31-linux-x64.rpm
153.45 MB ± jdk-8u31-linux-x64.tar.gz
209.17 MB ± jdk-8u31-macosx-x64.dmg
136.91MB * jdk-8u31-solaris-sparcv9.tar.Z
97.11 MB £ jdk-8u31-solaris-sparcv9.tar.gz
137.51 MB S jdk-8u31-S0laris-x64.tar.Z
94.82 MB 至 jdk-8u31-solaris-x64.tar.gz
157.96 MB _ ± jdk-8u31-windows-i586.exe
170.36 MB S jdk-8u31-windows-x64.exe
图 4-8 选择需要的 JDK
Fig 4-8 choice requires JDK
2.安装 Eclipse
除前面介绍的以外, Eclipse 还有一个最大的优点就是免安装,只需要将已 下载好的文件解压缩到指定的路径即可o Eclipse不会自己更改计算机上的设置, 也不会在卸载后残留任何垃圾,这就是大家常说的绿色软件。在浏览器中输入 Eclipse官网地址:http://www.eclipse.org/或是利用百度搜索Eclipse再从百度网页 上选择该地址。在Eclipse官网首页直接点击“Download”按钮进入下载页面,出 现类似于图4-8的表格,选择需要的版本,本文中选择“Eclipse IDE for Java Developers”。然后点击进入选择合适本机操作系统的版本,在页面中找到如图 4-9的列表(Download Links),本文选择的是Windows x64的版本。
Down load Links
Windows 32-bit
Windows 64-bit
Mac OS X (Cocoa) 32-bit
Mac OS X (Cocoa) 64-bit
Linux 32-bit
Linux 64-bit
图 4-9 选择需要 Eclipse 版本
Fig 4-9 choice requires Eclipse version
下载完毕后,建立一个新的文件夹,本文在D盘建立一个Eclipse的文件夹 (注意:建立文件夹时,文件夹的名称和文件夹的路径最好不要出现中文字符, 否则在程序执行过程中可能会出现不必要的错误),将已经下载好的压缩文件全 部解压到该文件夹中。此时已经完成对Eclipse的安装。点击eclipse.exe即可启 动Eclipseo也可以在桌面上生成eclipse.exe的快捷键,避免下次启动Eclipse时, 经过繁琐的步骤到该文件夹下寻找 eclipse.exe。
3. 安装 Android Development Tools ( ADT)plugin for Eclipse
打开 Eclipse,下载并安装 Android Development Tools(ADT)plugin for Eclipseo 打开Eclipse后,依次点击Help—Install new Software,出现如图4-10的画面,点 击“Add”按钮,在添加新软件的界面中输入以下信息:
Name: Android Plugin
Location: http://dl-ssl.google.com/android/eclipse/
这样既完成了 ADT plugin for Eclipse 的安装。
寸 CS | J<IV« I DC
|typ« filter text
Version
衣击这个按 钮,并输吴 Android笄发 工具的地址
[ Select All 二][Deselect All ]
|7I Group items by category
I' I Shaw only software Applicdble to t«rg«t ■nvironmant
(?) Contact aII update sites during instAll to find required softwflro
Whot is already icstoMed?
图 4-10 安装 ADT plugin for Eclipse
Fig 4-10 install the ADT plugin for Eclipse
4.安装 Android Software Development Kit(Android SDK)
通过启动浏览器,在浏览器地址栏处输入以下地址,或是利用百度搜索
Android SDK再从百度网页上选择以下地址(也可以通过其他方式):
http://developer.android.com/sdk/index.html ( 该 网 站 时 常 会 出 现 打 不 开 现 象 , Android developer 最新国内镜像:http://wear.techbrood.com/也包含 Android 最新文档 以及Android Wear, Android TV,Android Auto各个子领域方面的内容。)
通过该地址进入 Android SDK 官网,并找到如图 4-11 的表格。从该表格可 以看出, Android 官方网 站推荐 Windows 操作系统选择 installer_r23.0.2- windows.exeo因此在本文中,我们选择官方推荐的链接进行下载,并打开之前 在D盘建立的Eclipse文件夹,将下载好的文件解压缩到该文件夹中。通过以上 步骤,Android SDK会自动生成一个android-sdk的文件夹。在android-sdk下找 到SDK Manager.exe并点击出现如图4-12的对话框,包括各种版本的SDK (SDK Platform And X.X APLX)、程序中的例子(Samples for SDK)、Android SDK 的资 源文件(Sources for Android SDK)、Android SDK 的文档(Documentation for Android SDK)以及 Google 提供的其它 API (Google APIs by Google Inc)等。为 了方便起见,可以将其全部下载安装好。
I Platform 1 Package 1 S'ze MD5 Checksum
Windows
32 & 64-
bit an droid-sdk_r23.0.2-wi ndows.zip 141435413
bytes 89f0576abf3f362a700767bdc2735c8a
installer_r23.0.2-windows.exe
(Recom mended) 93015376 bytes 7be4b9c230341 el fb57c0f84a8df3994
MacOS XJ bit / an droid-sdk r23.0.2-ma cosx.zip 90996733 bytes 322787b0e6G629d926c28690c79ac0d8
Linu/
32^f64- an droid-sdk_r23.0.2-li nux.tgz 140827643
bytes 94a8c62086a7398cc0e73el c8e65f71 e
首方推荐的Windows安装程序
Except as noted, th is content is licensed under Creative Commons Attribution 2.5. For details and restrictions, seethe Content License. About Android | Legal | Support
图 4-11 Android SDK 的官网
Fig 4-11 Android SDK's website
图 4-12 Android SDK Manager
Fig 4-12 Android SDK Manager
安装好Android SDK Manager,还需要在Eclipse中设置路径。具体步骤是: 先打开Eclipse,依次选择Window—Preferences,在对话框中选择Android并将 android-sdk 的路径填写在 SDK Location 中。
5.建立 Android Virtual Device( AVD)
在编写 Android 程序时,我们可以通过 AVD 手机模拟器来显示当前程序的 运行效果。它包含于Android SDK中。建立AVD步骤是:在Eclipse中依次点击 Window—Android Virtual Device Manager,屏幕会出现 AVD 管理器的对话框, 点击“New”新建一个手机模拟器,依次填写AVD的名称(Name:MyAndroid)> 分辨率( Device:4.7”WXGA 1280*720: xhdpi)、 Android 版本( Target: Android 4.4.2-API Level 19)、键盘(KeyBord: hardware keyboard present)> 皮肤(Skin: Display a skin with hardware controls) 前置摄像头(Front Camera: None)、后置 摄像头(Back Camera: Emulated)> 内存(Memory Options: RAM=512M, VM Heap=64 )、内置存储卡(Internal Storage : 200MiB )、外置存储卡(SD Card:Size=200MiB)。
通过以上步骤,Android的开发工具就已经安装好了。如果要建立其它的AVD, 与步骤 5 的过程一致,只不过是在参数设置上有所区别。
6.测试配置
(1)新建 Android Application Project 项目
⑵在activity_main.xml中添加TextView并设置属性参数,设置如下
<TextView
android:id="@+id/myTestView" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textSize="40sp"
/>
⑶建立MainActivity类并继承Activity类,在该类中复写onCreate()方法
@Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
TextView myTestView = (TextView) findViewById(R.id.myTestView); myTestView.setText("测试配置成功!");
}
程序写好后,在工具栏中选择Android Virtual Manager—选中“MyAndroid” —Start—Launch,启动之前已经建立好的AVD手机模拟器。然后选中建好的程 序右击选择 Run as—Android Application—Choose a running Android device(AVD Name: MyAndroid),如果屏幕出现如图4-13的画面,说明Android开发工具已 经配置成功。
l(l Irrigationinformationsystem 汝 U 10:50 0 0 0
测试配置成功!
图 4-13 Android 开发工具测试
Fig 4-13 the Android development tools test
7. 打包发布
只要之前通过 Run As Android Application 测试过已写好的程序,我们可以到 在Eclipse左边的工作目录的bin文件夹下就能找到与项目同名的apk文件。或 是可以使用以下方法:
(1)选中项目,右键菜单—Andoid Tools—Export Unsigned Application Package, 直接保存就行,这是未签名的。
(2)选中项目,右键菜单—Andoid Tools—Export Signed Application Package, 后面一步步的去做,这是签名的。
APK 签名用处主要有两种:
作用一:使用特殊的key签名可以获取到一些不同的权限。
作用二:使用 key 签名可以保证软件升级时的一致性,同时也可以防止被一 些恶意软件覆盖。
本文中,在程序中途需要真机测试时,我们使用前一种方法发布,到最后最 终程序完成时,使用后一种方法发布。
4.4.2调用 Web Service
在灌区信息管理系统的中,Android调用Web Services服务器端的接口还是 很简单的。首先,我们需要导入类库:ksoap-android类库。由于移动终端的应用 软件要调用Web Service暴露出来的接口,但是标准的Android SDK并不包含相 关的类库,这时我们必须借助第三方的类库(ksoap-android类库)来帮助我们完 成在Android手机中获取服务器端Web Service调用。有了这个类库,调用Web Service就很方便了。由于我们选择的是KSOAP2引擎技术,所以在本文中选择 的 ksoap-android 类库是 ksoap2-android-assembly-2.4-jar-with-dependencies。我们 可以通过登陆链接http://code.google.eom/p/ksoap2-android/直接下载。下载完毕后, 将该jar包导入相应的工程内即可对其调用。
我们可以按照下面步骤完成对Web Service的调用:
1.创建 HttpTransportSE 对象,该对象用于调用 WebService 操作
HttpTransportSE ht = new HttpTransportSE(SERVICE_URL);
2.创建 SoapSerializationEnvelope 对象。
使用 soap1.1 协议创建 Envelop 对象
SoapSerializationEnvelope envelope =
new SoapSerializationEnvelope(SoapEnvelope.VER11);
3.创建SoapObject对象,将 Web Service的命名空间(NAMESPACE)和方 法名(mathodName)以参数的形式传入。
实例化 SoapObject 对象
SoapObject object = new SoapObject(SERVICE_NAMESPACE, mathodName);
4.客户端与服务器进行通信时,添加数据参数需要调用 addProperty(String name, Object value)方法,name表示参数名。需要注意的是:参数名对应的不是 Web Service方法中的参数名,而是要对应xml文件中设置的参数名;通常情况 下,工具会按顺序依次生成“argO”、“argl”、“arg2”……,当然我们调用时也要按 参数的顺序将name属性依次填写。
object.addProperty("arg0", 1);
5.调用 SoapSerializationEnvelope 的 setOutputSoapObject()方法,将 SoapObject 对象设置为 SoapSerializationEnvelope 对象的传出消息
envelope.bodyOut = object;
6.调用 webService时,需要调用 HttpTransportSE对象的方法call(),将 SoapSerializationEnvelope 对象作为参数。
ht.call(null, envelope);
7.解析Web服务器返回的对象。
由于软件每次调用Web Service的接口,都需要调用该过程,可以将此过程 抽象到一个方法类中,放在 irrigationinformationsystem.utils 的工具包下。这样每 次与Web Service通信时,只需要调用该类中的方法即可。
4.4.3主要模块和方法
1.连接服务器模块
Android 移动终端的各项操作几乎都要与 Web 服务器端进行通信,因此掉用 Web服务器端暴露的接口是一个很频繁的动作,所以将调用Web Service的过程 设计成一个方法,并将其包装在 ConnectUtil 类中。这样不仅可以减少大量重复 的代码,而且对代码的优化也有很大地帮助,ConnectUtil类的代码如下: package IrrigationInformationSystemC.utils;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
public class ConnectUtil {
private static String NAMESPACE ;
private static String SERVICEURL ;
private static String METHOD_NAME ;
public static SoapObject soapObject;
private SoapObject request ;
private static ConnectUtil instance = new ConnectUtil();
//私有的构造 (构造器,构造函数,构造方法)
private ConnectUtil(){}
//公开,静态的工厂方法
public static ConnectUtil getInstance() {
return instance;
}
public void setNAMESPACE(String namespace){
NAMESPACE = namespace;
}
public void setSERVICEURL(String serviceurl){
SERVICEURL = serviceurl;
}
public UserInfo getUserById(String methodName,int user_id) {
METHOD_NAME = methodName;
String user_id_str;〃农户 id
String user_name;// 农户姓名
String user_gender;// 农户性另 U
String user_tel;// 联系方式
String user_address;〃 农户家庭地址
String user_farmland_info;〃农户对应的农田信息
String user_water_info;// 对应用水信息
if(NAMESPACE !=null && METHOD_NAME!=null){
request = new SoapObject(NAMESPACE, METHOD_NAME);
int myuser_id = user_id;
if(myuser_id!=O){〃在java中,如果int没有赋值,则默认问0 request.addProperty("arg0", user_id);
}
//生成调用WebService方法的SOAP请求信息,并指定SOAP的版本
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
envelope.bodyOut = request;
envelope.dotNet = false; //当前开发的是Java WS这里需要不调用.net WS
HttpTransportSE ht = new HttpTransportSE(SERVICEURL);
try {
ht.call(null, envelope);
if (envelope.getResponse() != null) {
SoapObject result = (SoapObject) envelope.bodyIn;
user_id_str = result.getProperty(0).toString();
user_name = result.getProperty(1).toString();
user_gender = result.getProperty(2).toString();
user_tel = result.getProperty(3).toString();
user_address = result.getProperty(4).toString();〃 农户家庭地址 user_farmland_info = result.getProperty(5).toString();〃 对用农田信息 user_water_info = result.getProperty(6).toString();
UserInfo userInfo = new UserInfo(user_id_str, user_name, user_gender, user_tel, user_address, user_farmland_info, user_water_info);
return userInfo;
}
} catch (Exception e) { e.printStackTrace();
}
return null;
}
return null;
}
//ConnectUtil类中还有很多方法,比如说查询所有用户信息getUsers(),通过 id号查询农田信息getFramlandById(),查询所有农田信息getFramlandInfos(),验 证水票等功能。由于方法有很多相似性,且代码很多,在这里就不一一列举,只 列出一个方法。
}
调用此方法时,还必须在 AndroidManifest.xml 中声明该应用自身所拥有的权 限,具体做法为:<uses-permission android:name ="android.permission. INTERNET" />
2.短信通知模块
由于农户的手机终端没有 App 或者农户手机不是智能手机,无法安装软件, 在通知农户预计配水开始时间和购水成功同时,需要调用短信功能,以做到实时 通知的效果。在Android系统中已经自带短信功能,但是为了做到能被移动终端 App自动调用,并且短信的号码和内容能根据应用要求自动填写,需要制作一个 工具类,方便被各个功能和方法调用。短信通知模块的代码如下:
package IrrigationInformationSystemC.utils;
import android.content.Intent;
import android.net.Uri;
public class SendMessageUtil {
private static String mynumber;
private static String mymessage_body;
//单例模式
private static SendMessageUtil instance = new SendMessageUtil();
//私有的构造 (构造器,构造函数,构造方法)
private SendMessageUtil(){}
//公开,静态的工厂方法
public static SendMessageUtil getInstance() {
return instance;
}
public Intent sendMessage(String number,String message_body){
mynumber = number;
mymessage_body = message_body; if(mynumber!=null&&mymessage_body!=null){ Uri uri = Uri.parse("smsto:"+mynumber); Intent intent = new Intent(Intent.ACTION_SENDTO,uri); intent.putExtra("sms_body", mymessage_body); return intent;
}
else return null;
}
}
3.电话通知模块
在紧急情况下,短信通知不能及时被农户发现,需要调用电话通知模块的功 能。电话功能和短信功能一样,同样属于 Android 系统中自带的功能。在这里, 我们主要是将电话功能制作成一个工具类。这样我们每次调用时,只需要调用工 具类中的一个方法即可,不必写大段的代码。电话通知模块的工具类的代码如下: package IrrigationInformationSystemC.utils;
import android.content.Intent;
import android.net.Uri;
publicclass DailUtil {
privatestatic DailUtil instance = new DailUtil();
privatestatic String mynumber;
private DailUtil(){}
//公开,静态的工厂方法
publicstatic DailUtil getInstance() {
returninstance;
}
publicstatic Intent myDail(String number){
mynumber = number;
if(mynumber!=null){
Uri uri = Uri. parse(mynumber);
Intent intent = newIntent(Intent.ACTION_DIAL,uri); return intent;
}
else return null;
}
}
第五章 服务器端的设计与实现
5.1 服务器端的功能模块
根据需求分析,灌区信息管理系统的服务器端部分,主要实现的功能可以用 图 5-1 表示:
图 5-1 服务器端功能模块图
Fig 5-1 The function model of Web Service
由上图可知, Web Service 部分主要实现的功能如下:
1.提供水票信息:对于直接在灌溉管理站购水的用户,灌溉管理站工作人员 将用户的购水信息录入数据库,并为用户开具购水证明(水票)。Android移动终 端通过 Web Service 提供的接口,查询验证水票信息的真伪。
2.提供查询数据:服务器端提供移动终端可查询的信息有:农田用户信息, 用户购水信息、农田及农田用水信息、土壤水分信息、渠道放水量及降雨量等信 息。
3.响应购水申请:该部分主要是响应Android移动终端,配水人员在农田现 场帮助农户完成的购水申请。在申请购水时,管理人员通过比较查看用户及农田 信息和购水等相关信息,分析并决定是否同意用户的购水申请或决定放水量的大 小、预计放水开始时间。
4.接收上传图像:为了便于管理和保证数据存储的安全,移动终端将现场所 采集的图像信息上传到服务器端,供其它有权限的终端用户查询,也可以供农田 用户到灌溉管理站查询,做到数据的共享。该功能也为配水操作人员的工作成果 提供证据,一方面供灌溉管局检查灌溉配水人员的作业成果,另一方面预防农田 用户在配水工作人员配水作业完成后的抵赖现象,进一步起到保护配水工作人员 的作用。
5.管理用户:服务器端的管理人员拥有用户管理的最高权限,为Android移 动终端的用户注册账号,设置初始密码并赋予相应的用户权限,比如说验证水票、 查看用户信息及申请购水等权限。Android移动终端的用户只能在管理人员赋予 的权限内进行操作。当然,管理人员也可以对用户进行注销等操作。
6.历史数据:主要记录Android移动终端用户的查询记录和操作记录,方便 以后管理人员的查看。
5.2Web 服务的设计
服务器端本文采用Tomcat + MySql的架构,结合SOAP、Web Services等技 术完成与 Android 移动终端的相互通信。由于 SOAP 是一种安全、简单、与厂商 无关的消息机制,所以灌区信息管理系统采用基于 SOAP 的消息机制进行数据的 交互。
Web Services的框架有很多种,目前,Web Services框架主要有Xfire、
JAX-WS(Java API for XML-Web Services)、 REST(Representational State Transfer 表述性状态转移)。
Xfire: 一种Java Web服务引擎,在Pojo和SOA之间充当连接的作用[58]。 相对于之前或同时代的 Web 引擎(如 Axis), Xfire 大大简化了 Java 应用在 Web Service的搭建步骤。不过相对于后面出现的JAX-WS,其配置还是比较繁琐, 目前基本上已经过时。
JAX-WS: JAX-WS是Java 6中才有的,它是一种新的Web Service模式,基 于注解的方式配置Web Serviceo相对于Xfire,其配置过程已经变得非常简单。 它同时兼容基于SOAP和REST的Web服务。
REST:该方法用的比较少。
基于上述分析,本文的灌区信息管理系统的Web Service部分采用JAX-WS 方式。
5.3 数据库的设计
5.3.1数据库框架的设计
灌区信息管理系统的数据存储需要数据的支持,所以数据库的设计是 Web 服务器端的主要任务。在服务器端,程序与数据的连接采用 Hibernate 框架,使 用 Hibernate 使得程序的开发更加简单,并且在我们将来更换数据库时也不会对 程序的维护带来很大的修改,只需要将配置文件做一些简单的处理即可。
Hibernate 的核心接口主要包括: Session、SessionFactory、Transaction、Query、 Criteria和Configuration,它们被用于大多数有关数据库操作的软件开发中。本 文中,采用Session接口完成系统中程序对数据库的CRUD(Create,增加;Retrieve, 读取;Update,更新;Delete,删除)操作,所以Session接口是使用最频繁的一 个接口。在数据库查询时,可以使用HQL语句或SQL语句两种方式进行查询。 在灌区信息管理系统采用Hibernate框架,主要出于以下原因:
1.引入Hibernate,我们无需关注数据库底层的操作,这样可以将注意力全部 集中在业务逻辑层的设计,加大了程序的开发效率。
2.分层更清晰,耦合性更小。
3.通用性强,在保证程序不需要修改的前提下,只需要修改一下配置文件就 可以实现数据库的更换。
4.对象化。
5.性能‘Hibernate会根据数据库的类型和操作方法选取性能高效的SQL语句。
6.增加了程序的鲁棒性。
Hibernate 开发方式主要有以下三种方式:
方式一: Domain object -> mapping->db。 (官方推荐)
方式二:先设计数据库,然后使用工具自动生成mapping和Domain objecto 方式三:由映射文件开始。
由于大部分编程人员习惯于在数据库的基础上进行程序的设计,所以方式二 被普遍使用。因此在本文中,也采用第二种设计方式。
在使用 Hibernate 框架时,需要以下 jar 包:
hibernate3.jar: Hibernate 的核心库。
odmg.jar: Hibernate 利用 odmg.jar 包实现了 ODMG 规范,也是 Hibernate 框 架的核心库。
cglib-asm.jar: CGLIB 库。
dom4j.jar 用来读写 XML 文件。
commons-collections.jar: commons-collections.jar 主要包含 Apache 开发的集 合类。
commons-beanutils.jar:同 commons-collections.jar 一样,也是 Apache Commons 包中的一个,主要包含一些Bean工具类。
commons-lang.jar:包含了一些数据类型的工具类,是java.lang.*的扩展。
commons-logging.jar:日志功能。
commons-collections-2.1.1.jar: Apache 的工具集。
5.3.2数据库表的设计
Web服务器需要实现的相关功能包括:提供水票信息、提供查询数据、响应 购水申请、接收上传图像以及管理用户等,这些功能都需要在数据库中作相应的 设计。根据需求分析,需要完成以下表的设计:灌区组织人员表、农户信息表、 农户购水信息表、农田信息表、水票表、农田用水信息表、渠道水位信息表、降 水量表、图像管理表、灌溉配水人员购水记录表等。
下面重点对灌区组织人员表、农户信息表、水票信息表、渠道水位信息表、 灌溉配水人员购水记录表进行设计。
灌区组织人员表users_staff:这里包括灌区管理局工作人员、灌溉管理站的 管理人员、灌溉配水操作人员以及系统管理人员,所有工作人员的分类是通过用 户权限来区分(auth_id),包括工作编号、密码、用户权限、姓名、性别、联系 方式、家庭住址、工作起始时间以及对个人的情况描述,如表5-1所示。
表 5-1 users_staff 表
Tab 5-1 users_staff table
字段名称 字段类型 是否为空 字段描述 备注
users_staff_id INT UNSIGNED NOT NULL id号 PRIMARY KEY
users_staff_pwd VARCHAR(30) NOT NULL 密码
auth_id INT UNSIGNED NOT NULL 用户权限
name VARCHAR(30) NOT NULL 姓名
gender CHAR(1) NOT NULL 性别
tel VARCHAR(25) NOT NULL 联系方式
add VARCHAR(50) NOT NULL 地址
work_start time DATE NOT NULL 工作开始时间
description VARCHAR(100) NULL 个人描述
农户信息表farmland_user:用来记录农田用户的相关信息,主要包括用户编
号、用户姓名、性别、联系方式、家庭住址、对应农田信息、用水状况。如表
5-2所示。
表 5-2 farmland_user 表
Tab 5-2 farmland_user table
字段名称 字段类型 是否为空 字段描述 备注
farmland_user_id INT UNSIGNED NOT NULL id号 PRIMARY KEY
name VARCHAR(30) NOT NULL 姓名
gender CHAR(1) NOT NULL 性别
tel VARCHAR(25) NOT NULL 联系方式
add VARCHAR(50) NULL 地址
fram_id INT UNSIGNED NOT NULL 对应农田信息
water status VARCHAR(100) NULL 用水信息
水票信息表ticket:包括水票的所有信息,如:水票编号、购水人姓名、购
水人编号、联系电话、单价、总量、总计金额、对应农田id、农田信息、对应渠
道号、预计放水开始时间、预计放水结束时间、配水状态、购水日期。如表5-3 所示。
表 5-3 Water_tickets 表
Tab 5-3 Water_tickets table
字段名称 字段类型 是否为空 字段描述 备注
ticket_id INT UNSIGNED NOT NULL id号 PRIMARY KEY
owner_name VARCHAR(30) NOT NULL 购水人姓名
owner_id INT UNSIGNED NOT NULL 购水人编号
tel VARCHAR(25) NULL 联系电话
water_unitprice INT NOT NULL 单价
water_totals INT NOT NULL 总量
ticket_price INT NOT NULL 总计金额
farmland_id INT UNSIGNED NOT NULL 农田id
farmland_info VARCHAR(255) NULL 农田信息
chn_id INT UNSIGNED NOT NULL 对应渠道号
pre_begin_time DATETIME NOT NULL 预计放水开始时间
pre_end_time DATETIME NOT NULL 预计放水结束时间
status VARCHAR(10) NOT NULL 配水状态
purchase data DATETIME NOT NULL 购水日期
渠道水位信息表water_lever_info:主要记录灌区渠道的水位信息,包括记录 编号、渠道号、水位、时间值。如表5-4所示。
表 5-4 water_lever_info 表
Tab 5-4 water_lever_info table
字段名称 字段类型 是否为空 字段描述 备注
record_id INT UNSIGNED NOT NULL id号 PRIMARY KEY
chn_id INT UNSIGNED NOT NULL 渠道号
water_lever VARCHAR(10) NOT NULL 水位值
time TIME NOT NULL 记录时间
配水人员购水记录表buy_water_records:该表主要是供灌溉管理站的工作人 员进行查询,查看移动终端的配水人员申请购水的记录,方便灌区组织管理中财 务的计算。流水号、操作人员id、操作人员姓名、水票编号、购水农田id、相 关备注信息。如表5-5所示。
表 5-5 buy_water_records 表
Tab 5-5 buy_water_records table
字段名称 字段类型 是否为空 字段描述 备注
purchase _id users staff id INT UNSIGNED
INT UNSIGNED NOT NULL
NOT NULL 流水号
操作人员id PRIMARY KEY
users_staff_name VARCHAR(30) NOT NULL 操作人员姓名
ticket_id INT UNSIGNED NOT NULL 水票编号
farmland_id INT UNSIGNED NOT NULL 购水农田 id
description VARCHAR(100) NULL 备注
5.4 服务器端的实现
5.4.1软件需求
1.MyEclipse
MyEclipse (MyEclipse Enterprise Workbench,简称 MyEclipse)是 Elipse 的 一个插件,其核心还是 Elipse。 Myeclipse 为 WEB 开发带来了极大的方便。它能 把 JavaEE 以及连数据库等方面的内容有效的整合起来。它通过一系列的插件实 现了 Servlet, AJAX, JSP, JSF, Struts, Spring, Hibernate, EJB3, JDBC 等多 项功能。
MyEclipse 的官方网站为:http://www.genuitec.com/products/myeclipse (或者 http://www.myeclipsecn.com)
2.Tomcat
Tomcat 是由 Apache 主导开发的一款 WEB 服务器。相对于其它应用服务器 如: IBM 的 Websphere、 Caucho Technology 的 Resin、 Macromedia 的 JRun、 NEC WebOTX Application Server、 JBoss Application Server、 BEA 的 WebLogic 等,它 是一款免费、开源的并且性能也相当稳定的WEB服务器,受到了广大Java开发 人员的青睐,并且许多软件开发商也都使用 Tomcat。
3.MySql
数据库(Database)是按照一定的数据结构方式和规律将数据有效的存储起 来的一款软件,它为用户提供数据的存储、查询、修改以及删除等一系列服务。 在信息化时代中,数据库在科学研究和决策中扮演着重要的角色。数据库系统实 现了数据安全控制和完整性控制。常用的数据库软件有:IBM的DB2、Oracle、 Informix、 Sybase、 SQL Server、 PostgreSQL、 MySQL 等。
其中, MySQL 是当前非常流行的一款小型数据软件。相对于其它大型数据 库管(如 Oracle、 SYBASE、 INGRES、 PostgreSQL、 Visual FoxPro、 Informix、 DB2 等), MySQL 体积小、速度快,并且其具有的功能对于大多数软件系统来 说已经应付自如,再加上开放源代码的特性,使得MySQL深受世界各地软件系 统开发者的欢迎。综合比较,MySQL具有以下特性:
•价格
•速度
•容易使用
•可移植性
•支持查询语言
•丰富的接口
•安全性和连接性
综上所述,本课题将MySQL作为Web服务器端的数据库软件。
4.连接数据库的类库
mysql-connector-java-5.1.5-bin: JDBC 驱动是根据不同的数据库来选择,由于 本文中采用的数据库是MySQL,所以需要java连接MySQL的驱动程序。
5.Hibernate 相关的类库
开发 Hibernate 需要先获得相关的类库。 通常, 只需要 antlr-2.7.6、 commons-collections-3.1、 dom4j-1.6.1、 hibernate3 、 javassist-3.4.GA 、 jta-1.1 、 slf4j-api-1.5.10、slf4j-simple-1.5.10 这些类库就可以了。
5.4.2开发工具的安装过程
1.安装 MyEclipse
进入MyEclipse官方,选择官方推荐的版本MyEclipse 2015 CI 11,下载并完 成安装。与 Eclipse 不同的是, MyEclipse 是一个安装文件,不过只要通过指示一 步一步地进行即可。接下来就是注册码的输入,依次点击windowfPreferencesr MyEclipse—SubscriptionfEnter Subscription,最后在相应的地方输入用户名和密 码。这时,我们所需要的软件就安装好了。
2.Tomcat 安装与配置
进入Tomca官方网站http://tomcat.apache.org/下载安装包,并将其放在c盘 (其它路径也可以,切记不能把服务器放在带中文或带空格的目录下面)。由于 Tomcat是用Java写的程序,所以需要java虚拟机的支持,我们还需要对环境变 量和端口进行设置。需要进行以下设置:
(1)添加环境变量:变量名为 JAVA_HOME 变量值为 C:\Program Files\Java\ jdk1.9.0
⑵打开 PATH,添加变量值:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin
(3)添加变量名: CLASSPATH=%JAVA_HOME %\lib\dt.jar;%JAVA_HOME%\ lib\tools.jar
在Tomcat文件夹的bin目录下点击可执行文件startup.bat,当电脑显示命令 行窗口后在浏览器地址栏中输入:http://localhost:8080/,当出现带有Apache Tomcat Logo图片的页面时,说明服务器已经安装成功并顺利开启。如果出现“The CATALINA_HOME environment variable is not defined correctly” 的错误提示,则 说明CATALINA_HOME或是JAVA_HOME没有配置好。需要重新配置。
3.Tomcat 在 MyEclipse 下的配置
打开 MyEclipse, window—Preferences—MyEclipse Enterprise Workbench— Servers—Tomcat—Tomcat 6.X
(1)将 Tomcat server 选为 Enable
(2)在 Tomcat home directory 处点 Browse...按钮选择 Tomcat6 的安装路径: C:\Tomcat6
(3)打开 window—Preferences—MyEclipse Enterprise Workbench—Servers— Tomcat—Tomcat 6.X—JDK 树形目录,在 Tomcat JDK name 处点 add...按钮,添 加第一步安装的JDK,在弹出的窗口中点击“Browse...”找到安装路径D:\Program Files\Java\jdk1.6.0_18,点击 ok 返回。
(4)打开 window—Preferences—MyEclipse Enterprise Workbench—Servers— Tomcat—Tomcat 6.X—Paths 树形目录,在右边 Prepend to classpath 处点“Add JAR/ZIP”按钮,添加 JAR 包“D:\Tomcat7\bin\tomcat-juli.jar”
有时,当点击MyEclipse的部署键,并不会出现相应的对话框。这时需要进 入 MyEclipse 的 workspace 目录下, 找 到 并 删 除 .metadata\.plugins\org. eclipse.core.runtime\.settings\com.genuitec.eclipse.ast.deploy.core.prefs 的文件即可 正常运行(这是很多Web开发人员也是本文中遇到的问题)。
4.数据库的安装
下载好MySQL的安装包进行安装时,会弹出写有“ This application requires .NET Framework 4.0.Please install the .NET Framework then run this installer again."的警示框,意思是需要在安装MySQL前先确保计算机上已经安 装.NET Framework 4.0。有些网站将这种原因解释为:高版本的MySQL中集成 了一些新的功能,这些新的功能需要用到.net frameworko解决以上问题就可以 正常安装了,依然还要避免以下问题:在安装路径中中文字符、空格以及一些特 殊字符的问题,否则会安装失败;要记住安装过程中数据库监听的端口的设置, 本文采用默认的3306端口; MySql的超级用户密码,该超级用户十分关键,它 对数据库具有绝对的权限,如果没有该用户名的密码,我们将不能进行数据库相 关方面的操作。
5.4.3 Web Service 服务器的具体实现
1.新建 Web Service Project 项目
新建 Web Service Project 项目项目名称为 IrrigationInformationSystemWS,具 体步骤为: 菜单栏 fFilefNewfWeb Service Project, Project Name: IrrigationInformationSystemWS, 在 WebService&J2EE Details 中的 FrameWork 选 择 JAX-WS 方式。
2.创建 Web Service 中的包及类库,实现自己的业务
虽然目前有很多关于用 Android 直接连接远程数据库的文章、博客,但是这 样做的方法既不安全效率也不好。在本文中使用接口连接Web服务器,再通过 服务器的业务逻辑层完成对数据库的操作。Web Service的服务器与客户端的关 系如图5-2所示,前者主要是处理后者的请求,执行业务逻辑,最终返回响应数据。 现在我们需要完成的主要是服务器中数据库的设计,并完成业务逻辑层的设计, 最后将所需要的接口暴露出来,供客户端使用。客户端主要是完成发送请求,获 取数据等操作。在Web Service系统中,只要Web服务器端提供接口,客户端无 论是PHP应用还是.NET和Android应用,只要正确地调用Web服务器端的接口 即可。在本文中的客户端方面,我主要是完成Android移动客户端的编写,该部 分已在第四章中重点描述。
JSP ► 浏览器
WebService
Client PHP应用
Servlet ►
Service WebService
► C ► WebService .net应用
Server Client
Dao ■ WebService Android 移动
Client 客户端应用
■ WebService iOS移动客
服务器端 ■ Client 户端应用
客户端
图 5-2 Web Service 服务器与客户端的关系
Fig 5-2 Web Service server and client relationship
(1)domain 类的实现
根据需求分析,灌区组织人员所要包含的信息如图5-3所示,并且将该信息 包装成一个domain类[59](其它对象如:农户、水票、渠道等的实现与灌区组织 人员是非常类似的,为了节省篇幅,本文只对灌区组织人员的实现进行详细的描 述)。
Fig 5-3 Irrigation district organization personnel graph
灌区组织人员(users_staff)的domain类为Users_staff,其主要代码如下: package IrrigationInformationSystemWS.domain;
import java.util.Date;
public class Users_staff {
private Integer users_staff_id;
private String users_staff_pwd;
private Integer auth_id;
private String name;
private String gender;
private String tel;
private String add;
private Date work_start_time;
private String description;
public Users_staff(Integer users_staff_id, String users_staff_pwd,
Integer auth_id, String name, String gender, String tel,
String add, Date work_start_time, String description) { super();
this.users_staff_id = users_staff_id;
this.users_staff_pwd = users_staff_pwd;
this.auth_id = auth_id;
this.name = name;
this.gender = gender;
this.tel = tel;
this.add = add;
this.work_start_time = work_start_time; this.description = description;
}
public Integer getUsers_staff_id() {
return users_staff_id;
}
public void setUsers_staff_id(Integer users_staff_id) { this.users_staff_id = users_staff_id;
}
//……其他 sets and gets 方法……
}
其它domain类对象的代码与Users_staff类似,只是在变量上有所区别。需 要注意的是,domain类中所有的变量全部私有。
(2)对象关系映射文件的实现
Users_staff类的对象关系映射文件为Users_staff.hbm.xml,该文件用于配置 domain对象和表的映射关系。通常我们将其放在Users_staff所在包的domain文 件夹下,其配置如下:
<?xml version="1.0" encoding="utf-8"?>
<!--该文件要清楚地表述出类和表的对应关系-->
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="IrrigationInformationSystemWS.domain">
<!-- name : 表示类名 table 表示该类和哪个表映射 -->
<class name="Users_staff" table="users_staff">
<!-- id 元素表示表的主键是,每一个表都应该有一个主键 --> <!-- name:表示类的哪个属性是主键-->
<id name="users_staff_id" type="java.lang.Integer"></id>
<property name="users_staff_pwd" type="java.lang.String">
<column name="users_staff_pwd" not-null="true"/> </property>
<property name="auth_id" type="java.lang.Integer">
<column name="auth_id" not-null="true"/> </property>
<property name="name" type="java.util.String">
<column name="name" not-null="true"/>
</property>
<property name="gender" type="java.util.String">
<column name="gender" not-null="true"/>
</property>
<property name="tel" type="java.util.Date">
<column name="tel" not-null="true"/>
</property>
<property name="add" type="java.util.String">
<column name="add" not-null="true"/>
</property>
<property name="work_start_time" type="java.util.Date">
<column name="work_start_time" not-null="true"/>
</property>
<property name="description" type="java.util.String">
<column name="description" not-null="false"/>
</property>
</class>
其它 domain 对象的关系映射文件与 Users_staff.hbm.xml 文件类似,这里就 不在叙述。
(3) hibernate.cfg.xml 的实现
配置 hibernate.cfg.xml 文件,该文件主要作用是设置数据库的类型、驱动以 及登陆数据库所需的用户名、密码、url等,此外还要负责对象关系映射文件的 设置。 hibernate.cfg.xml 文件的具体配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration>
<session-factory>
<!—为 true 表示将 Hibernate 发送给数据库的 sql 显示出来 -->
<property name="show_sql">true</property>
<!-- SQL方言,这边设定的是MySQL -->
<property name="dialect">net.sf.hibernate.dialect.MySQLDialect</property>
<!--一次读的数据库记录数 -->
<property name="jdbc.fetch_size">50</property>
<!--设定对数据库进行批量删除 -->
<property name="jdbc.batch_size">30</property>
<!--驱动程序-->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<!--数据库用户名-->
<property name="connection.username">root</property>
<!--数据库密码-->
<property name="connection.password">1234</property>
<!—映射文件 -->
<mapping resource="IrrigationInformationSystemWS/domain/Users_staff.hbm.xml "/>
<mappingresource="IrrigationInformationSystemWS/domain/Farmland_user.hbm.xm l"/>
<mappingresource="IrrigationInformationSystemWS/domain/Water_tickets.hbm.xml
"/>
<!-- 其他映射文,这里就不 列举-->
</session-factory>
</hibernate-configuration>
(4)实现 Dao 连接数据库
Service 依赖于 Dao 层,为了避免大量重复代码的出现,所以将其抽取出, 并封装到一个接口之中,而其它类继承或实现这个通用的接口就可以了。因为 Dao层基本的就是CRUD操作,变化不是很大。Dao的实现代码如下: package IrrigationInformationSystemWS.dao;
import java.io.Serializable;
import java.util.List;
public interface BaseDao<T> {
public void save(T entity);
public void update(T entity);
public void delete(Serializable id);
public T findById(Serializable id);
public List<T> findByHQL(String hql, Object... params);
}
DaoImpl 类主要是实现 Dao 的接口
package IrrigationInformationSystemWS.dao.impl;
import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.util.List;
import javax.annotation.Resource;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.monday.dao.BaseDao;
@SuppressWarnings("unchecked") // BaseDaolmpl 定义 Dao 的通用操作的实现
public class BaseDaoImpl<T> implements BaseDao<T> {
private Class<T> clazz;
public BaseDaoImpl() { //通过构造方法指定 DAO 的具体实现类
ParameterizedType type =
(ParameterizedType) this.getClass().getGenericSuperclass(); clazz = (Class<T>) type.getActualTypeArguments()[0];
System.out.println("DAO 的真实实现类是:"+ this.clazz.getName());
}
@Resource //向 Dao 层注入 SessionFactory
private SessionFactory sessionFactory;
protected Session getSession() { //获取当前工作的 Session
return this.sessionFactory.getCurrentSession();
}
public void save(T entity) { this.getSession().save(entity);
}
public void update(T entity) { this.getSession().update(entity);
}
public void delete(Serializable id) {
this.getSession().delete(this.findById(id));
}
public T findById(Serializable id) {
return (T) this.getSession().get(this.clazz, id);
}
public List<T> findByHQL(String hql, Object... params) {
Query query = this.getSession().createQuery(hql);
for (int i = 0; params != null && i < params.length; i++) {
query.setParameter(i, params);
}
return query.list();
}
}
(5)Service 层的实现
Service 层主要是引用对应的 Dao 操作数据库,完成相应的业务逻辑处理。 ServiceImpl是对Service中方法的实现。由于BaseServiceImpl类需要大量的代码, 不便将其全部列举出来,所以本文只对 BaseService 接口的方法做简单的介绍, BaseService 的代码如下:
public interface BaseService {
public void save(Object object);
public void update(Object object);
public void delete(Object object);
public Object ReadByID(String targetName,int id); @SuppressWarnings("rawtypes")
public List ReadAll(String targetName);
public List ReadAllByOrder(String targetName,String propertyName,String order); @SuppressWarnings("rawtypes")
public List ReadByProperty(String targetName,String propertyName,Object propertyValue);
public List ReadByPropertyList(String targetName,List<String> propertyName, List<Object> propertyValue);
public List ReadLimitedByOrder(String targetName,String propertyName,int num, String order);
public Object ReadSingle(String targetName,String propertyName,Object propertyValue);
public int ReadCount(String targetName);
}
(6)供客户端调用方法的实现
在Web Service部分,需要实现所有供Client部分调用的接口,比如说,查 询水票信息、查询农田用户信息、查询农田信息、查询水位信息、查询降水量等。 所有的方法都很类似,只是调用业务层时有所不同,图 5-4 展示的是部分要实现 接口的方法。
J [J] Fa rrn I a n d U s e rl nf □ .j a va
」匕 Fa rm I a nd Us 已「Info
0 getFarrnlandUserinfoE!yld(int) : FarmlandUser
G g etFa rrnlandUserinfo B yN a m e (Etri ng) : List-Fa rm I a nd User :=■
0 getFarrnlandUserinfoE!yTeI(String) : FarmlandUser
G g etFa rrnlandUserinfo s 0 : Li st < Fa rm landU5er>
J | [J] Staffinfo Java
童 Q Staffinfo
G g etFa rm I a nd Userinfo 5 0 : List< Staff:=■
G getStafflnfoEly.Auth(int) : List< Staffs
G g et£taffl nfo E! yl d (i nt) : Staff
G getStafflnf□ ElyNam e(String) : List< Staff :=■
G g etStaffl nfo E!yTe I (Stri ng) : Staff
> [7] WaterLeve rinf□ Java
• [J] W自t已rTicketlnfo.j ava
■ © WaterTicketlnfo
Q getTick已tl门foElylidd门t) : String
0 getTicketinfosQ : List =:Ticket>
图 5-4 Web Service 要实现的接口方法
Fig 5-4 Web Service needed interface methods
3. 部署 Web Service
Web Service 的部署需要进行一些配置,这些配置操作非常简单,因为 MyEclipse 已经为我们集成了这些功能,我们只需要按着 MyEclipse 的提示操作 即可。需要注意的是: FrameWork 选择 JAX-WS, strategy 中选择第二个(根据 java 文件创立Web Service)o重复以上步骤,使每一个需要暴露的方法均出现对应的 接口文件类(xxxDelegate.java),表示如图5-5所示。
>|T| Fa rm I a n dlnfo .j ava
t> ||T| FsrmlandlnfoDelegate.iava I
>[J] Fa rm I a n d U 5 e ri nf o .j ava
t> pl F白门丁i丨自门ci U 5已「I门fci D已丨已q白t已■诂*自|
>|T| Staffinfo .java™
t> Pl 白ffl门fci D已I已g白tE j已朋|
>|T| Wate rLeve ri nfo」ava
'iJH白t已「L已*已「I门f ci D已I已g白t已j已朋|
>[T| Wate rTi ck etl nfo j ava
>||T| Wat e rTi ck etl nfo Delegate Java I
图 5-5 Web Service 配置图
Fig 5-5 Web Service configuration diagram 项目右击添加库文件:JAX-WS2.1Runtime Libariies 和 JAX-WS2.1API Web。 至此Web Service已经配置完毕,启动Tomecat即可完成项目的部署。
第六章 测试与验证
6.1 测试目的
本文设计的灌区信息管理系统涉及到Android与Web Service以及移动网络 等技术。通过测试,可以对该系统的运行状态和效果有客观的了解与评价,同时 也能检验系统中存在的一些问题,为之后的改进提供一些参考。
6.2 测试环境的选择
硬件选择:PC机(联想B460:处理器Intel(R) Core(TM) i3、主频2.4GHz、 内存 2G)、Android 移动手机(Coolpad 7820L:处理器 ARMv7 Processor rev 3 四 核 1.183GHz 内存 1G 分辨率 1280*720)。
操作系统:Windows7 x64 旗舰版、Android 4.3。
Web 应用服务器: Tomcat 6.0.20。
数据库: MySQL 5.6。
6.3 测试结果
将 IrrigationInformationSystemC.apk 发布到 Android 移动手机上,并启动 Tomcat 服务器。其中 IrrigationlnformationSystemC.apk 位于 Eclipse 工作共空间目 录下,其具位置在 workspace\android\IrrigationInformationSystemC\bin 文件夹下。
组图 6-1 为灌区信息管理系统运行过程中的部分截图,包括用户首次登录软 件、申请购水、水票验证、农户信息通知以及用户管理。点击 Android 手机上 IrrigationInformationSystemC 的图标,进入首页界面,点击进入按钮,进入网络 设置的界面。正确填写网络参数,点击确认,手机屏幕进入用户登录的界面,至 此完成用户的登陆。成功登陆后,软件进入主菜单界面。点击“申请购水”按钮, 进入购水界面。用户可以在主菜单点击“水票验证”按钮对数据库中的水票信息 进行查询。在用户管理方面,用户可以对自己的密码进行修改。
$ 4 <■» ◎:i 羣• 3 28«a 20:42
IrrigationlnformationSystemC
欢迎使用灌区信息管理系统! 进入
登陆
重置
密码:
首页 网络设置 用户登录
渠道编号: 农田编号: 预计放水时间: 预计结束时间:
购水人土 申请人ID: 联系电话: 单价:
总量: 总价:
主菜单
申请购水 水票验证查询
历史数堀
水票编号10001
购水人姓名:张三 购水人编号20001 联系电话:13903510000 单价:140元
数:S:1亩 总价:140元
农田编号3001001 渠道号3001 预计放水时间:201 5-03-10 08:00 预计结束时间:2015-03-10 13:00 用水状态:未濯水
购水曰期:2015-03-01
用户信息
用户购水信患
农田信息
降水■査询
农田用水值患
历史数据
ID: 1
操作:申请购水 嫌作时间:201503-01 20: 43 水81编号1000】■«
ID: 2
燥作:水累验证
損作时间:2015-03-01 20 : 43
水票细号:10001 wa
ID: 3
燥作:农户21知
蝶作时间:201503-01 20: 44
农户fBSid:・・
农田信息
水票验证
信息数据查询
历史数据查询
用户通知
动填充短信内容
用户管理
图 6-1 系统运行测试组图
Fig 6-1 system running diagram
上图所显示的结果均为在 AVD 正常运行的前提下,将系统的移动终端部分 打包发布在真机测试的结果。经过测试,基本上完成设计的需求,移动终端可以 成功的调用Web Service提供的接口,实现对Web Service端数据库的CRUD操 作,并且将所查询的数据在移动终端正确的显示。在通知购水用户模块方面,能 成功的调用短信模块和通话模块,并且能智能地将所需的内容填写好,完成对购 水用户的通知。整体上,该系统做到良好的运行。
总结和展望
本文的工作总结
随着我国已经进入了 4G 移动互联网时代,移动互联网已经切切实实地改变 了人们的生活和工作。再加上智能手机性能的迅速提高,使得人们可以只通过一 部智能手机,就可以随时随地的查询想要查询的信息。无论在工作中还是娱乐中, 无线移动应用已在当今移动互联网时代扮演着主要的角色,它也成为一个国家向 信息化时代迈进的中坚力量。
本文主要针对我国灌区配水过程中的灌溉效率低下的问题,利用我国便利的 移动互联网设计出一套基于 Android 和 Web Services 技术的灌区信息管理系统, 目的是方便我国农田灌水的工作。在该灌区信息管理系统中,实现了灌区管理系 统在灌溉配水过程中的信息化管理。在不需要进行大量投入的前提之下,为农田 灌溉配水带来极大的便利。
在整个系统的设计过程中,本文深入了解我国目前灌区组织系统的工作过程, 对目前灌区配水过程中的一些不合理因素做了认真的分析,提出本课题的研究内 容。本文综合运用计算机Android编程、java编程、数据库、Web Services、移 动通信网络技术等先进技术,在系统设计之前,进行了大量的资料收集等准备工 作,直到系统设计开始时,并通过查看书籍和上网等方式不停地进行知识的补充。 现总结如下:
1.深入了解我国农业用水的现状和目前移动互联网的便利性及国内外在农田 灌溉这方面的发展现状。针对我国灌区信息管理系统中存在的一些问题,详细了 解设计灌区信息管理系统的必要性和可实施性。
2.主要了解灌区信息管理系统中所涉及到的相关技术,如移动通信技术、 Android 技术以及 Web Services 技术等。并且了解这些技术是如何相互联系起来, 以及各个技术之间用到的一些其它技术,比如说 Web 服务器端是通过什么方式 向客户端提供信息接口, Android 是通过什么方式完成调用 Web 服务器端提供 的接口。
3.对本课题设计的方案做一个总体的规划。首先要对农田灌溉信息管理系统 的设计总体需求做一个详细的分析。然后根据需求分析,设计出适合本课题的总 体架构图。
4.详细介绍了移动客户端的设计与实现。根据总体方案的需求,实现移动终 端部分的功能。
5.重点完成Web Services服务器端的设计与实现。在Web服务器端,主要完 成Web服务和数据库等后台的设计,并为Android提供相应的接口,以供Android 终端 App 调用。
6.将 Android客户端和Web服务器结合起来,完成Android对Web服务器的 信息查询和其它操作过程。使整个系统搭建起来。并完成系统中代码的编写和调 试,最终做到系统的成功部署。
最终完成灌区灌溉系统中数据的管理、传输及查询。当农户需要对农田进行 配水时,配水操作人员能方便地验证农户的缴费凭证,或根据实际情况在现场及 时地为农户申请购水,配水等一系列工作。随着移动互联网迅速的发展和高性能 智能手机的不断推出,该系统的性能也将不断提高。
展望
虽然本系统基本实现了需求的功能,但是系统界面还不是很美观、友好。一 款软件的成功不仅仅在于其功能的强大,界面设计也占了其成功因素的半壁江山。 为了能让用户在使用软件同时,给用户带来一种视觉的愉悦感,所以在下一步工 作中,尽量设计出友好美观的界面,从而增强用户的体验。另一方面,在数据传 输方面,还需对数据的传输进行加密(对称、非对称)等措施,进而做到数据的 安全。
目前,随着我国已经进入 4G 网络时代,移动互联网已经越来越方便,再加 上市面上已经出现越来越多的高性能手机,并且价格也都是大众所能接受的,当 然人们对手机的要求也越来越高。相信Android技术与Web Services相结合的灌 区信息管理系统能提高农田配水的效率,给灌区组织的工作人员和农田购水用户 均带来极大的方便。同时也解决了灌区配水过程中的一些纠纷,进一步保证灌区 配水过程中购水用户、配水操作员工、管区系统三者的利益,划分各方在配水过
程中的责任。相信该系统会得到广泛的应用。
参考文献
[1]赵九洲.基于Android的灌区管理信息系统研究[D].郑州大学.2012
[2]http://www.china.com.cn/node_7064072/content_19634796.htm
[3]张成心•低功耗节水灌溉系统的优化设计与应用[D]•昆明理工大学,2014.
[4]http://www.baike.com/wiki/农业
[5]贾玉平.灌溉渠系配水与农业用水管理系统的研究[D].西北农林科技大学, 2004
[6]http://gg.aquasmart.cn/hyjs/4340.html
[7]http://www.chinabaike.com/t/9707/2013/0608/1249645.html
[8]刘帅旗.Android移动应用开发从入门到精通[M].北京:中国铁道出版社, 2012.
[9]祝忠方.基于Android的移动互联终端的设计和实现[D].北方工业大学2014
[10]孙宏明.Android设计入门、应用到精通[M].北京:中国水利水电出版社,2012.
[11]Sampathkumar, M, Hugar, L B, Poddar, R S, Hiremath, G M. Irrigation
Information Management through Information and Communication Technology- A Case Study of Command Areas in Karnataka[J]. Indian Journal of Agricultural Economics, 2011, 66 (3):538.
[12]R.Salvador,B. Latorre,P. Paniagua,E. Playan. Farmers' scheduling patterns in on-demand pressurized irrigation[J]. Agricultural Water Management, 2011,102 (1):86-96.
[13]谢菲.基于Web的灌区信息化管理系统的研究与开发[D].华中科技大学, 2007.
[14]http://finance.chinanews.com/cj/2013/11-26/5550036.shtml
[15]Aysun Kara Tuncer,Safa Tuncer. Effect of Different Final Irrigation Solutions on Dentinal Tubule Penetration Depth and Percentage of Root Canal Sealer[J].Journal of Endodontics,2012,38(6):860-863..
[16]Giovanni Caruso, Hava F. Rapoport, Riccardo Gucci. Long-term evaluation of yield components of young olive trees during the onset of fruit production under different irrigation regimes[J]. Irrigation Science, 2013, 31(1): 37-47.
[17]Awudu Abdulai, Victor Owusu, John-Eudes A. Bakang. Adoption of safer irrigation technologies and cropping patterns: Evidence from Southern Ghana[J]. Ecological Economics, 2011, 70(7): 1415-1423.
[18]程方.移动通信系统演进及3G信令[M].北京:电子工业出版社,2009.
[19]张天魁,冯春燕,曾志民等.B3G/4G移动通信系统中的无线资源管理[M].北 京:电子工业出版社, 2010.
[20]樊昌信,曹丽娜.通信原理[M].北京:国防工业出版社,2011.
[21]张晓林,国强,窦峥.CDMA移动通信技术[M].哈尔滨:哈尔滨工程大学出 版社, 2010.
[22]李军.TD-SCDMA HSDPA系统设计与组网技术[M].北京:电子工业出版社,
2010.
[23]文志成,张伟.GPRS网络技术[M].北京:电子工业出版社,2005.
[24]孔德恩,胡爱群.GPRS数据终端的研究与实现[J].微计算机信息,2007, 23(33): 105-107
[25]王映民,孙韶辉.TD-TLE移动宽带系统[M].北京:人民邮电出版社,2013.
[26]徐国强.基于Android的移动视频监控系统设计[D].太原:太原理工大学, 2014.
[27]Cheng Min Lin, JyhHorng Lin, ChyiRen Dow, et al.Benchmark dalvik and native code for Android system[C]//2011 Second International Conference on Innovations in Bio-inspired Computing and Applications(IBICA), Shenzhan, 2011: 320-323.
[28]Noma M, Saiwaki N, Itakura S, et al. Composition and Evaluation of the Humanlike Motions of an Android[C]//2006 6th IEEE-RAS International Conference on Humanoid Robots, Genova, 2006: 163-168.
[29]岳传真.Android系统移植和应用程序开发[D].上海:复旦大学,2010.
[30]KiCheol Son, Jong YeoLee. The method of android application speed up by using NDK[C]//2012 International Conference on Awareness Science and Technology (iCAST), Dalian, 2011: 382-385.
[31]田静.Android多点触摸遥控系统的研究与实现[D].西安科技大学2012.
[32]胡锐.基于Android系统智能手机的游戏移植开发[D].华南理工大学2011.
[33]张嘉宾.Android应用的安全性研究[D].北京邮电大学2013.
[34]秦凯.Android开源社区应用项目开发的效率研究[D].华南理工大学2012.
[35]凡海飞.基于Android平台的无线点菜系统的设计与实现[D].华中科技大学
2011.
[36]黄鑫.基于Android的大学生个人课程助理系统的设计与实现[D].厦门大学
2014.
[37]房鑫鑫.Android恶意软件实现及检测研究[D].南京邮电大学2013.
[38]奚宁.基于Android的智能医疗信息服务系统服务器端设计与实现[D].吉林 大学 2013.
[39]EricArmstrong 著.詹文军,廖铮译.Java Web Services 教程[M].北京:电 子工业出版社,2003.
[40]Guangzhou."Mobile webserver to the Android platform". ISECS International Colloquium on Computing. Communication. Control, and Management (CCCM).2010.
[41]吕瑞明.基于移动通信平台的Web Services访问模式的研究[D].武汉: 武汉理工大学, 2007.
[42]Rendon O, Pabon F, Vargas M, Guaca J. Architectures for Web services access from mobile devices[J].Third Latin American Web Congress, 2005: 50-55.
[43]张磊,彭舰,李红.移动设备上实现Web Service技术的研究及应用[J].计 算机应用, 2004,24(12): 144-146.
[44]Y.Daniel Liang著.李娜译.Java语言程序设计基础篇[M].北京:机械工业出版 社, 2011.
[45]Y.Daniel Liang著.李娜译.Java语言程序设计进阶篇[M].北京:机械工业出版 社, 2011.
[46]江泽锋.基于Web Services的企业应用集成研究与应用[D].重庆大学2004.
[47]Robert Englander著.黄刚译.Java与SOAP[M].北京:中国电力出版社, 2002.
[48]Nilo Mitra, Ericsson, Yves Lafon, W3C.SOAP Version 1.2 Part 0: Primer (Second Edition) [EB/OL].http://www.w3.org/TR/2007 /REC-soap12-part0- 20070427, 2007.4.27.
[49]王建伟.基于Web Services的SOA架构设计方法的研究[D].大连海事大学 2006.
[50]郭晋伟.SOA架构的管理信息系统设计与实现[D].中国科学院研究生院(沈 阳计算技术研究所).2006.
[51]刘振杰.基于C/S与B/S混合模式的煤矿安全管理信息系统研究[D].中北大学, 2011
[52]袁静,胡昌华,龙勇等.基于C/S+B/S双模式的分布式远程诊断专家系统[J]. 计算机工程, 2006, 32 (12): 196-198.
[53]于洋.基于Ajax/REST风格的Web Service的设计与实现[D].北京交通大 学,2010.
[54]金雯岚.Ajax技术在博客系统中的应用[D].大连海事大学2008
[55]冯海隆.基于GPRS和C/S+B/S的挖掘机远程监控及故障诊断系统的初步研 究[D].浙江大学,2006.
[56]Bruce Eckel著.陈昊鹏译.Java编程思想[M].北京:机械工业出版社,2013.
[57]张桂元,贾燕枫.Eclipse开发入门与项目实践[M].北京:人民邮电出版社, 2006.
[58]kalogen. Eclipse 下使用 Xfire 创建 Web Service 入门示例 [EB/OL].http://kalogen.javaeye.com/blog/255744.2008-10-21.
[59]Eric Freeman,ElElisabeth Freeman 著,O'Reilly Taiwan 公司译.Head First 设 计模式[M].北京:中国电力出版社,2007.