毕业设计——基于Android系统失物招领平台设计与实现:
时间:2022-01-18 16:26:17 浏览次数:次
太原理工大学
毕业设计(论文)任务书
毕业设计(论文)题目:
基于Android系统的失物招领平台的设计与实现
毕业设计(论文)要求及原始数据(资料):
1.综述生活中失物招领工作的现状,说明该项目实现的意义;
2.深入分析失物招领事务的业务逻辑划分,证明项目的技术可行性;
3.深入研究Android客户端程序与后台服务器进行网络通信的机制;
4.熟练Android客户端前端逻辑处理的设计和实现;
5.掌握搭建服务器的关键技术,学会搭建简单的后台服务器;
6.实现Android客户端与后台服务器交互完成业务处理;
7.训练检索文献资料和利用文献资料的能力;
8. 训练撰写技术文档与学位论文的能力。
毕业设计(论文)主要内容:
1.综述线下失物招领工作普遍遇到的问题和困境;
2.了解目前流行的服务器框架搭建的技术;
3.深入分析失物招领的业务逻辑,设计后台数据库;
4.搭建后台服务器,响应客户端的数据提交和数据请求;
5. 划分Android客户端的功能模块,设计项目的实现框架;
6.Android客户端UI显示和逻辑处理代码的编写;
7.完成失物招领平台的设计和实现。
学生应交出的设计文件(论文):
1.内容完整、层次清晰、叙述流畅、排版规范的毕业设计论文;
2.包括毕业设计论文、源程序等内容在内的毕业设计电子文档及其它相关材料。
主要参考文献(资料):
[1]李欢.捡东西成累赘?探访失物招领现状[N].大河报,2015-01-06(2)
[2]李刚.疯狂Android讲义[M].北京:电子工业出版社,2013
[3]耿海宵,张丽梦.校园失物招领系统设计[J].Silicon Valley,2012,(4)
[4] 董伟东.失物招领系统的建立[J].计算机光盘软件与应用,2014,(1):251-252
[5] Lübke, Robert1;Schuster, Daniel; Schill, Alexander..A framework for the development of mobile social software on android [C].Mobile Computing, Applications, and Services - Third International Conference, MobiCASE 2011,(3):207-225
[6] 袁伟华.多线程技术在Android应用程序与服务器通信的应用[J].电脑编程技巧与维护,2014,(4)
[7] 卜炟编.开发参考:JSTL网络标签与SSH类参考手册[K].北京:中国铁道出版社,2010
[8] Chandrashekar; Sushruth.Android application for school of art and design[D].San Diego State University,2014
[9]Scott Oaks,Henry Wong.Java Threads[M].O’Reilly,2004
[10] 上海杰普教研组.Android高级编程[M].上海:上海杰普,2014
专业班级软件1110班学生王杰
要求设计(论文)工作起止日期2015年3月23日~2015年7月3日
指导教师签字尹珂男日期2015年3月23日教研室主任审查签字日期
系主任批准签字日期
基于Android系统的失物招领平台的设计与实现
摘要
基于Android系统的失物招领平台是基于当下各传统失物招领平台和一些网站型失物招领平台的不足而建立的一个新兴失物招领平台。新平台客户端部署在Android手机端,实现真正的移动失物招领。新平台架构采用Android客户端、Web服务器和MySql 数据库架构,使信息交互不再依赖浏览器,手机应用添加主流手势解锁、手势登陆,操作更加简便,并且信息交互界面更加友好、便捷。新平台允许失主发布物品丢失信息、允许捡拾者发布见到物品信息,并且增加一键联系失主/捡拾者功能,大大提高了失物招领的工作效率。新平台更增加了“中国正能量”模块,宣传近期好人好事,弘扬点滴正能量。
关键词: 失物招领;Android系统;平台;手势解锁;工作效率
The Design and Realization of the Lost and Found based on
Android platform
Abstracts
The Lost and Found software based on Android platform is a new solution which differ from the present various lost and found software and some sites of the lost and found. New software is deployed in the Android mobile terminal platform, realizes the real mobile lost and found. New platform has the Android client, Web server and MySql database structure, make the information interaction is no longer dependent on the browser, mobile applications with mainstream gestures to unlock, gestures landing, operating more simple, and the information interaction interface more friendly and convenient.This new platform to allow the owner released lost information and allowed to pick up see items, and add function of one-key contacting owner/picker function, greatly improving the efficiency of the lost and found. New platform more added "China is energy" module publicity recent good deeds, carry forward the intravenous drip positive energy.
Keywords: Lost and Found; platform; Android; gesture landing; efficiency of operations
目录
1. 绪论 (1)
1.1 选题来源及现实意义 (1)
1.2 失物招领平台的现状 (2)
1.3 选题的发展前景 (2)
2. 失物招领平台的现状与分析 (4)
2.1现有的失物招领平台 (4)
2.2 对传统平台的分析 (4)
2.2.1 信息流不对称 (4)
2.2.2 运营成本高 (5)
2.2.3 服务范围小,受众面小 (5)
2.2.4 被动接受信息,工作效率低 (5)
2.3 对线上平台的分析 (5)
2.4 发现可利用资源 (6)
3. 可行性分析 (7)
3.1 经济可行性 (7)
3.2 技术可行性 (7)
3.2.1 Android平台的成熟性 (7)
3.2.2平台架构的可行性 (9)
3.2.3Android技术点的可行性 (9)
3.3 时间可行性 (14)
3.4 社会可行性 (14)
4. 系统设计与实现 (15)
4.1 系统综述 (15)
4.2 平台整体架构 (15)
5. Android客户端设计与实现 (17)
5.1 Android客户端模块划分 (17)
5.2 登陆注册模块 (17)
5.2.1注册模块 (18)
5.2.2登陆模块 (19)
5.3 设置模块 (19)
5.3.1 手势管理模块 (20)
5.3.2登录密码管理 (20)
5.4 找回物品模块 (23)
5.5 捡到物品模块 (23)
5.6 正能量模块 (23)
6.数据库设计与实现 (24)
6.1 数据库概述 (24)
6.2 数据库表结构 (24)
7.服务器端设计与实现 (27)
7.1密码部分 (27)
7.2 个人信息 (30)
7.3 查询物品 (31)
7.4 新闻 (33)
8. 功能测试 (35)
8.1登陆注册模块测试 (35)
8.2失物招领模块测试 (38)
8.3正能量模块测试 (39)
8.4我的设置模块测试 (40)
8.4.1个人信息 (40)
8.4.2手势测试 (40)
8.4.3密码修改测试 (42)
9. 总结 (44)
参考文献 (46)
致谢 (47)
外文翻译 (48)
外文原文 (48)
中文翻译 (52)
1 绪论
1.1 选题来源及现实意义
随着我国社会经济的不断发展,人们的生活节奏也在不断加快,加之现在生活中越来越多的物件小型化,我们不免会偶尔疏忽而遗忘物品。生活中谁没有丢东西的经历呢?就体积而言,大到雨伞、书包、行李箱、各类书籍,小至银行卡,钥匙,身份证,眼镜、钱夹等等。雨伞可以买,银行卡可以挂失补办,钥匙可以重新配;书丢了可以买新的,但是以前的笔记是买不到的,身份证一时半会都补办不下来,尤其是人在外地时更是麻烦!遇到这种情况怎么办呢?
生活中我们也会偶然捡到别人遗失的物品,捡到的东西该怎么处理呢?捡到工作证、学生证,上边有单位信息可以很方便地联系;但身份证上的信息联系起来代价太大,难以联系;如果捡到的是雨伞、书籍,连个联系的人都没有;捡到钥匙不知道该还给谁或是交给谁,而失主还焦头烂额地发愁进不了家门;捡到银行卡就只能交给发卡行了,但是实际上丢银行卡的人到银行补办银行卡时几乎不会有机会找到丢失的卡... ...
以上种种丢失物品或是捡到物品的情况在我们日常生活中频繁的出现,丢东西的人着急着急找失物像大海捞针,而捡到东西的人有心寻找失主却无从找起!那么怎么能减少这种情况——让失主知道谁捡了自己丢的物品,让捡到东西的人知道怎么联系失主呢?
加之智能手机普及以及移动互联网的发展,几乎每个人至少有一部以上的智能手机。这一部部智能手机将世界上一个个游离的个体人,不管距离多远,不管何种语言,连接成为一个整体。智能手机将我们的世界缩小到一部手机上,通过一块几英寸的屏幕将形形色色的数据以光速传播着。人们可以随时随地通过手中接入互联网的智能手机来获取各种信息,并可以发布自己独有的信息。而在智能手机领域,Android手机占有很大的市场份额。
基于对以上这些情况的考虑,我们可以在手机上安装一个专门用来进行发布失物找回和寻找失主信息的软件,搭建一个在线的失物招领平台,将失主和失物的信息进行采集发布,极大地扩展双方的信息沟通渠道,减少失物招领的精力花费、时间代价和经济代价,从而提高生活品质。由于只是局限性,本次选定Android手机作为开发平台,来
完成“失物招领平台”的搭建。
1.2 失物招领平台的现状
现阶段的失物招领平台主要是这样一种组织运作方式——有一个实体的运维部门(或是政府机构,或是企事业单位如铁路航空,或是民间团体,也有盈利性公司)作为主体,被动的接收失物信息(当有人捡到丢失物并且愿意花时间精力归还时才对交给它),并由工作人员人工录入失物信息,进行分类(有的也不分类)保管,然后在一个特定的信息发布平台发布失物招领信息,等待失主有机会看到这些信息后来联系,最终完成这个失物找回的流程。
这些平台很多都是线下的运行,像一些社区的失物招领处,特别是中国铁路竟然没有一个成熟的失物招领平台,中国铁路各大车站每日客流量达几万到十几万,即使有万分之一的乘客丢失了行李,各大车站加起来也是一个很庞大的数据!
这些平台几乎都是区域性的,只服务周边的社区、城市。如果你不幸到另一个城市然后丢了物品,那么这几乎就不可能找回了。
综上所述,现阶段还没有一个服务范围广,信息在线收集、在线发布并且为广大群众所熟知的失物招领平台。在移动互联网高度发展的今天,失物招领仍然是阻碍和谐社会发展的一块绊脚石。
1.3 选题的发展前景
生活中,每个人都会由于一时疏忽大意而丢失遗落物品,价值和使用价值有大有小,但不管价值大小,在你发现物品遗失而正要好要用到时,每个人都会焦虑不安而又到处找不到,大大影响了一段时间的心情和工作效率,影响了生活品质。在没有一个完善的失物招领平台的支持下,几乎丢了东西找不回来已经是一个“常识”,而能找回来就成为了一件幸事。
我国正在大力倡导建设社会主义和谐社会,全面提高国民素质,怎么能让这么一个问题成为一块绊脚石呢?
运行于Android手机端的失物招领APP有可能将每一个使用Android手机的用户连接到我们的失物招领平台,让每个人都成为一个失物招领的一个主体和子结点,让每个人都成为失物招领平台的受益者和工作者。
本选题旨在搬除这一块绊脚石,要让大家意识到,丢了的东西是有可能找回来的,是有专门的软件帮助你找回来的!而且这个软件有一个庞大的用户群,你的忧虑可能只是别人动动手指就能帮你解决的事情。当你被人帮助,我相信下一次你捡到东西会很乐意动动手指来帮助别人,我们要让每个人切实感受到和谐社会的微暖,共同为和谐社会的建设添砖加瓦!
我们要在本APP的使用过程中培养用户的习惯并改变用户的认知,让大家相信这是一款实用好用的应用,就像地图导航软件一样,装一个在手机里呗,万一啥时候不知道路就可以用。让大家改变过去的意识,相信丢失的东西是可以找回来的,动动手指,你我都可以为和谐社会出一份力!一起分享身边的故事,身边的感动,传递社会正能量,净化社会风气,共建文明城市,和谐社会。
2 失物招领平台的现状与分析
2.1 现有的失物招领平台
现阶段的失物招领平台还不是很成熟,总结起来主要有以下一些,按照不同的分类指标可以分为不同模式的平台。
(一)按照平台运行模式可以分为以下两种:
(1)传统的失物招领平台
传统的失物招领平台即线下运行的平台,都是人工操作,对失物收集分类、捡还者的信息登记、失主来找信息的登记分类都是线下操作,或者是手工登记,或是电脑录入,但是这些信息都是本地保存,不上传互联网。
(2)小范围的线上失物招领平台
这种平台是传统平台接入互联网的产物,相对与传统平台来讲有了很大的进步,将各方信息由系统管理员(工作人员)电脑录入,并发布在一个特定的
信息平台,用户可以接入互联网查看相关信息,但是服务范围小。
(二)按照平台性质及组织方式分为以下三种:
(1)政府服务部门或是企事业单位的失物招领平台,如上海失物招领服务平台(2)公益性的失物招领平台,如大连失物招领网
(3)营利性的失物招领公司,如南昌复失德商务信息咨询有限公司
2.2 对传统平台的分析
传统的失物招领平台理论上只能服务于一个很小的区域,如临近的几个社区,或是一个城市的某个部门,如xx市公交公司的失物招领处等。这些平台存在很明显的缺陷和不足:
2.2.1 信息流不对称
传统平台只能依靠人力来完成信息的收集处理,信息发布没有一个可见性广的平台,造成了失物招领工作中信息流的即为不对称性,结果是很多失主根本不知道自己的物品已经被捡到,还在到处寻找无果,最后放弃找回;很多失物在等待失主来找时根本不知道失主正在到处寻找,以为失主不要了,最后长期滞留无法处理,需要更多的人力,
地方来管理和存储;最后无奈销毁又造成资源的极大浪费。
2.2.2 运营成本高
传统平台的日常运维需要大量工作人员完成物品信息的收集登记、捡拾者信息的登记、物品的分类保管、失主的来访接待、失主信息登记、失物与失主信息的匹配、以及捡拾者与失主双方接洽事宜的处理等等一系列工作,在信息互联网高度发达的今天这些人力成本成为这个平台运维成本的最大支出。
2.2.3 服务范围小,受众面小
从服务的地域范围来讲,这些平台几乎都是区域性的,都是以一个城市,再小就是一个社区为服务单位,某些营利性公司可能拓展到周边的几个城市,但这相对于一个国家来说还是太小太微不足道了。如此小的受众面,在当今人们活动范围极大拓展的今天其实是起不到什么实际作用的(不排除会有一些人还是会通过此途径找回失物,此处是相对选题进行比较)。
2.2.4 被动接受信息,工作效率低
传统的失物招领平台都是被动地接收信息,只能等着捡拾者自己来上门登记捡到什么什么等信息,等着失主上门来找寻物品(且不论失主是否相信捡到东西的人会归还,不论失主是否知道有这么个失物招领处)。而且各项工作流程都是人工完成,会导致工作效率底下,让群众不再对这项工作抱有期望。
2.3 对线上平台的分析
现在的一些线上的失物招领平台已经有了一些起色,改善了传统平台的一些弊端,采用电子化办公大提高了信息收集管理的效率和人力成本;并通过互联网将相关信息发布在一个特定的平台上使得信息的传播范围极大拓展,使平台的受众面极大拓展;更重要的是允许注册用户自主发布丢失和招领信息,将无线的潜在用户变为这一工作的有力支持者。但是还是存在几个问题:
(1)平台认知度低,没有吸引力。对于失物招领平台,大家的普遍反映都是,“肯
定是谁丢了东西采取上边找找有没有自己的东西被捡到”。如果都是这样的想法,那么这个平台可以说是一个失败的平台,因为只有找的没有招领的,一条腿走路怎么能走得远呢?这样的平台能起到什么在作用呢?
(2)平台缺乏有效监管。以上海失物招领服务平台为例(只知道这个),俨然成了一个分成两类的贴吧,一个找东西,一个找失主。甚至有人借机发布不实信息,留下广告或诈骗的电话,造成了即为不良的影响,一个本来造福民众的平台上竟然会有广告甚至诈骗电话。
(3)平台便捷性不足。现在的失物招领平台都是一个个网站,用手机浏览器查看起来很不方便并且耗费大量流量费;而用电脑查看却不如手机方便,不如手机能方便随身携带,随时打开。这也给平台的进一步发展造成困扰。
(4)仍然脱离不了地域的限制,仍是“xx市失物招领平台”,没有将互联网的优势充分利用。
2.4 发现可利用资源
(1)积极向上的社会意识。借着我国正在大力建设社会主义和谐社会,弘扬中国正能量的春风,我们可以将我们的产品推出来,率先倡导拾金不昧的优良传统,引导民众意识。
(2)便捷而广泛的智能手机平台。失物招领平台的发展前进,可以借助智能手机普及的契机,将平台无限延伸,部署到每一台智能手机终端,通过移动互联网搭建一个覆盖整个网络的失物招领平台,让没一部智能手机都成为这个平台的一个节点,集结每个人的能量,让中国正能量在每个人之间激荡回旋。
(3)手机号码的身份验证。现在的手机号都是实名办理的(不包括非法办理的黑户号码,这本身就是违法的),我们的账户可以只允许手机号注册,一定程度可以避免很多用户发布不实消息。
(4)信用机制的不断成熟。我们可以加入一个等级成长系统,用来记录用户帮助他人的次数,这样的成长机制能够吸引用户奉献爱心,营造一个不断向上的社会意识。
3 可行性分析
3.1 经济可行性
本课题只为考察基于移动互联网、基于Android手机的失物招领平台的可操作性,为平台的正式开发奠定基础,不考虑经济市场因素,故而不必讨论本软件的经济可行性。而且从长远利益出发,此类生活软件的总和效益必然产生巨大的经济效益。
3.2 技术可行性
3.2.1 Android平台的成熟性
Android系统原来的公司名字就叫做Android。Andy Rubin创立了两个手机操作系统公司:Danger和Android。谷歌公司在2005收购了这个仅成立22月的高科技企业Android。Android系统也开始由谷歌接手研发,Android系统的负责人以及Android公司的CEO安迪·鲁宾成为谷歌公司的工程部副总裁,继续负责Android项目的研发工作。在2007年11月5日这天,谷歌公司正式向外接展示了这款名为Android的操作系统。并且在这天谷歌宣布建立一个全球性的联盟组织,该组织由34家手机制造商、软件开发商、电信运营商以及芯片制造商共同组成。这一联盟将支持谷歌发布的手机操作系统以及应用软件,将共同开发Android系统的开放源代码。
Android系统框架和上层应用是类java(不是正统的sun java)开发的,实现了自己的java虚拟机dalvik,在基本主流的智能手机的软件平台上,android的执行速度是最快的。
1、资源文件的优化读取。用xml文件来描述UI,这样有个好处是只要修改UI不用修改代码就可以修改界面的布局、显示风格和字体大小等。界面定义变得灵活方便。xml配置UI在qtopia运用也有但是这么强大并且也不广泛,因为xml文件有个不足是解析xml的效率很低。但是Android在编译的时候就把xml文件进行了优化,android 应用程序在解析时变得非常的高效。我们看到apk文件解压后会有个优化过的资源文件。
2、安装时进行优化dex文件。Android的应用程序都打包成一个apk文件,实际上就是一个zip文件。系统第一次起来或应用程序第一次安装时,系统就把apk文件解压
了,把可执行文件dex优化成odex文件并放在/data/dalvik-cache目录下。优化后的dex 文件启动速度会加快。这解释了为什么android系统第一次启动是比较慢,以后起来很快了。
3、制作数据库。Android的图形应用是加载整个sd卡内的所有图像的,但是为什么很快呢?其实android提前把数据做成了数据库,所以不用每次扫描整个这个sd卡,大大加快了启动速度。
4、高效的虚拟机。Android是基于类java虚拟机dalvik,一般的java虚拟机是基于栈的,而dalvik是基于寄存器的。实事求是说我对两者的区别了解不是很深入,不过网上有专门的相关文论进行分析。我的简单理解是栈的实现方式相对容易,相关数据是在内存中的栈里,而操作寄存器里数据的速度明显快与内存里的数据处理。
5、充分挖掘CPU的性能。Android刚出来的时候虽然支持arm cpu,实际上只支持armv5te的指令集的,因为android系统专门为armv5te 进行了优化,充分利用armv5te 的执行流水线来提高执行的效率,这也是在500M的三星2440运行效果不是很好,而在200M的omap cpu上运行比较流畅的原因了,所以在最新的代码中有专门针对x86和armv4的优化部分。
6、优化和裁剪的libc库。Libc库几乎是所以库和程序的基础,但是android没有直接利用libc库,而是自己开发了一个库:bionic,它实现了libc库的绝大多数的函数并根据平台进行了优化,但是有系统很少用并且消耗资源的少数函数是不支持的。它只有几百k,节省了空间同时也提高了执行效率。实际上体现了2-8原则,抓住少数重要的适当舍弃不必要的。
7、充分利用linux系统特性。分析过linux内核的朋友知道,linux fork一个新的进程是非常高效的,利用了COW机制。Android是每个进程是个独立的虚拟机(听说这么设计是为安全考虑,某个时候进程崩溃了不会影响这个系统和其他进程。)android 里每个进程都是基于虚拟机的,并且也要加载基本的库,实际上这些都是共享。所以android启动一个新的程序实际上并不消耗很多的内存和CPU资源。同时android在后台有个empty process运行,实际上就是运行一个虚拟机,当要启动一个应用时就直接在其上继续运行,qtopia也有这个机制。
8、高效的paint机制。这个特性可能跟启动关系不大,但是也是android高效的特性之一。界面变化时大部分实际上不是全屏内容变化的,只是局部变化,android 会根据变化的内容只是跟新局部的内容,也提高了效率。这个也提醒我们在开发应用程序时,
重载paint方法时尽量不要paint全屏内容。
3.2.2 平台架构的可行性
Android客户端与服务器、数据库的信息交换模型如下(图3-1平台架构模型):
图3-1 平台架构模型
Android客户端与服务器之间采用http请求进行交互,可以通过移动互联网,也可以使WIFI网络,服务器返回给客户端信息以JSON格式进行封装,客户端接收到服务器返回信息之后进行解析,根据解析结果将信息呈献给用户;服务器采用Structs2框架,数据库用MySql数据库,服务器与数据库通过JDBC连接,进行数据操作。
3.2.3 Android技术点的可行性
(1)Android本地数据存储
Android本地数据存储常用5中方式:
1. SharedPreferences方式
SharedPreferences是用来存储一些Key/Value类似的成对的基本数据类型,注意,它只能存储基本数据类型,也即int, long, boolean, String, float。事实上它完全相当于一个HashMap,唯一不同的就是HashMap中的Value可以是任何对象,而
SharedPreferences中的值只能存储基本数据类型(primitive types);
2. Internal Storage内部存储空间
手机内置的存储空间,称为内部存储,它是手机一旦出厂就无法改变,它也是手机的硬件指标之一,通常来讲手机内置存储空间越大意味着手机价格会越贵(很多地方把它称为手机内存,但我们做软件的知道,这并不准确,内存是指手机运行
时存储程序,数据和指令的地方;这里应该是手机内部存储的简称为内存,而并非严格意义上的内存)。内部存储空间十分有限,因而显得可贵,所以我们要尽可能避免使用;另外,它也是系统本身和系统应用程序主要的数据存储所在地,一旦内部存储空间耗尽,手机也就无法使用了。所以对于内部存储空间,我们要尽量避免使用。
3. External Storage外部存储空间
与内部存储空间相对,外部存储空间是指手机出厂的时候不存在,用户在使用时候可以自由添加的外部存储介质比如TS卡,SD卡等闪存储介质。这些闪存介质由最初的空间小价格贵,到现在的大容量价格便宜,所以几乎每个支持外部存储的手机上面都有大容量(大于等于2G)的闪存卡。
4. SQLite Database数据库
Android对数据库的支持很好,它本身集成了SQLite数据库,每个应用都可以方便的使用它,或者更确切的说,Android完全依赖于SQLite数据库,它所有的系统数据和用到的结构化数据都存储在数据库中。
它具有以下优点:
a. 效率出众,这是无可否认的;
b. 十分适合存储结构化数据;
c. 方便在不同的Activity,甚至不同的应用之间传递数据;
d. 由专门的ContentProvider来帮忙管理和维护数据库;
e. 可以方便的设置访问权限,私有还是都可见;
f. 操作方便,使用标准的CRUDE语句(Android系统提供的数据库操作函数);
g. 良好的可移植性和通用性,用标准的SQL语句就能实现CRUDE;
5.Internet网络
(2)Intent跳转
Android系统四大核心组件——Activity、Service服务、Content Provider内容提供者、BroadcastReceiver广播接收器,这四种组件是独立的,它们之间可以互相调用,协调工作,最终组成一个真正的Android应用。Intent是四大组件之间信息传输,动作调用的桥梁。Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android 则根据此Intent的描述,负责找到对应的组件,将Intent传递给调用的组件,并完成组件的调用。因此,Intent在这里起着一个媒体中介的作用,专门提供组件互相调用的相
关信息,实现调用者与被调用者之间的解耦。
(3)事件处理机制
Android系统提供两种事件处理机制:
1、基于监听的事件处理
在事件监听的处理模型中,主要涉及如下三类对象:
A. Event Source(事件源):事件发生的场所,通常就是各个组件、例如按钮、窗口、菜单等;
B. Event(事件):事件封装了界面组件上发生的特定事情(通常就是一次用户操作);
C. Event Listener(事件监听器):监听事件源所发生的事件,并对各种事件做出相应的响应。
基于监听的事件处理方式流程如下(图3-2基于监听的事件处理流程):
图3-2 基于监听的事件处理流程
2.、基于回调的事件处理机制
从代码的实现的角度来看,基于回调的事件处理模型更加简单。如果说事件监听制是一种委托式的事件处理,那么回调机制恰好与之相反:对于基于回调机制的事件处理模型来说,事件源与事件监听器是统一的。为了使用回调机制类处理GUI组件上所发生的事件,我们需要为该组件提供对应的事件处理方法--而Java又是一种静态语言,我们无法为某个对象动态的添加方法,因此只能继承GUI组件类,并重写该组件类的事
件处理方法来实现。
(4)ListView下拉刷新
通过对ListView添加了一个刷新layout作为header,在滚动中时不断改变header 的高度和内容并记录一些状态,在用户手指离开屏幕时根据状态决定进行刷新还是放弃刷新。
主要是通过重写ListView的onTouchEvent( )和OnScrollListener( )、onScroll( )、onScrollStateChanged( )函数实现,刷新状态共有四种,如下:
CLICK_TO_REFRESH 点击刷新状态,为初始状态;
DROP_DOWN_TO_REFRESH 当刷新layout高度低于一定范围时,为此状态;
RELEASE_TO_REFRESH 当刷新layout高度高于一定范围时,为此状态;
REFRESHING 刷新中时,为此状态
通过对不同状态加以判定,并在各自的监听方法中编写各自对应的触发响应方法,来实现类似于微信中下拉刷新列表的功能。
(5)Android手势解锁的实现
图3-3手势界面
手势密码的实现思路如下:
A. 正上方的提示区域,用一个类来实现,自定义view来绘制9个提示图标;
B. 手势密码绘制区域,用一个类(GestureContentView.java)来实现,它继承自ViewGroup里面, 添加9个ImageView来表示图标, 在onLayout()方法中设置它们的
位置;
C. 手势路径绘制,用一个类(GestureDrawline.java)来实现,复写onTouchEvent()方法,在这个方法里面监听TouchEvent事件:
D. ACTION_DOWN、ACTION_MOVE、ACTION_UP事件,来绘制手势连接不同点之间的路径;
E. 9个点的对象,用一个类(GesturePoint.java)来实现,保存它的位置、状态、背景图片等相关信息,判断用户手指当前的位置,取出当前的位置去与那9个点中的每个点的位置进行比较,如果用户点的位置在某一个点之内,那么当那个点置换背景图片;
F. 手势密码的获取,判断手指当前的位置,根据滑动路径经过的点,按顺序保存绘制的点的顺序(这里的点顺序从上到下分别是:1,2,3,4,5,6,7,8,9),不能有重复的点。(6)Android手机权限管理
Android手机的权限主要分为两类:ROOT权限和应用程序权限。ROOT权限是Android系统的最高权限,获得root权限之后就意味着已经获得了手机的所有文件的最高权限,这时候你可以对手机中的任何文件(包括系统文件)执行所有增、删、改、查的操作;而应用程序权限是手机在运行一个特定的应用程序时,程序要使用手机系统资源时要用到的权限,一般为硬件模块的开启和使用权限,如使用蓝牙、使用WIFI,接入数据网、使用相机,使用地理位置等等。
在手机应用开发中只用到应用程序权限。如果应用需要访问通讯录等功能,需要在程序的AndroidManifest.xml文件中添加
使用蓝牙功能——android.permission.BLUETOOTH
使用地理位置信息——android.permission.ACCESS_FINE_LOCATION
使用相机——android.permission.CAMERA
打开通讯录——android.permission.READ_CONTACTS
使用WIFI——android.permission.CHANGE_WIFI_STATE
接入移动网络——android.permission.INTERNET
读写文件——android.permission.WRITE_EXTERNAL_STORAGE
和android.permission.MOUNT_UNMOUNT_FILESYSTEMS
3.3 时间可行性
本课题设计利用本科毕业设计时间来实现平台的设计、架构和实现。
现在智能手机软件普遍采用敏捷开发模式进行产品开发,一个成熟的产品经过几个月的数次迭代完成最终的上线发布。本课题只是实现一个失物招领平台的简单实现,对性能没有过高的要求,所以在毕业设计期间完成是可以做得到的。
3.4 社会可行性
我过正在大力弘扬中国正能量,创建和谐发展的社会氛围。发现生活中的点滴感人事迹,一句温馨提示,一个微笑致意,都在你我之间泛起一股暖流。
本课题旨在为失主和捡到物品者之间搭建一座无障碍沟通的桥梁,让失主有平台发布自己丢失物品的信息,让有爱心的捡拾者有平台帮助失主解决燃眉之急,让人与人之间的互帮互助通过移动互联网产生更大的能量。在社会意识方面,是可行的,也是大家乐于接收,甚至是期盼已久的。
4 系统设计与实现
4.1 系统综述
本失物招领平台用户可见的部分有:使用前需要用户用手机号注册,登录系统后可以设置本地手势,方便登陆系统。在登录系统后,可以在“中国正能量”下浏览近期的推荐正能量,宣传好人好事,点击某一条简讯后可进入相应的资讯详情页;可以在“PICK (我捡到)”页面浏览最近登记的丢失物品信息列表,在页面上方可以点击城市选择、物品类型进行更细致的筛选,点击某一条记录可进入记录详情页,点击右上角“发布”可以发布自己捡到物品的信息,并会增加一条成长值;在“LOST(我丢失)”页面可以浏览最近被捡到的物品列表,页面上方可以筛选,右上角“发布”可以发布自己丢失物品的信息;在默认首页右上角有“我的设置图标”,点击可以进入设置页面进行相关信息的设置。
用户不可见部分包括服务器和数据库。数据库为用户发布的信息和查找相关信息提供数据存储和查询,为“正能量”模块的资讯提供数据源,登录密码的验证修改和找回提供数据支持,保存和修改用户信息。而服务器作为Android客户端发送请求、在数据库查询和插入数据、向客户端返回特定数据的桥梁,为众多的Android端的失物招领APP提供内容支持。
4.2 平台整体架构
如本章第一节系统概述所论述,该平台整体架构包括Android端失物招领APP、Web 服务器和后台数据库三部分,APP安装运行于智能手机上,服务器软件部署在服务器主机(本次以自己电脑作为服务器主机)上,数据库安装在主机上,架构如下(图4-1平台整体架构图):
图4-1 平台整体架构
Android手机上安装的APP应用作为客户端,通过网络接入Web服务器,向Web 服务器发送各种请求。服务器接收到各个客户端发来的网络请求后,解析不同参数值,进行响应操作,如果需要数据库数据,则与数据可进行增、删、改、查的操作,之后将操作结果封装成Json数据类型返回给客户端,客户端接收到服务器返回数据库后进行解析,并呈现给用户。
5 Android客户端设计与实现
5.1 Android客户端模块划分
Android客户端分为登陆注册、个人设置、找回物品、捡到物品、正能量资讯五个模块。各模块包含各自的功能,如下图所示(图5-1Android客户端模块):
图5-1 Android客户端模块划分
5.2 登陆注册模块
注册登录模块时用户第一次使用该应用时,需要用手机号在该平台进行注册,注册完成后要设置安全邮箱账号(必填项,用于在忘记密码时找回密码),注册完成后即进入系统首页,以后即可用该手机号和密码登录该平台。
在打开APP时,首先出现欢迎界面,本界面持续1.5秒,在此期间系统完成初始化和配置参数读取工作,然后进入“注册登陆”模块,流程图如下(图5-2登陆注册流程图):
图5-2登陆注册流程
5.2.1 注册模块
注册模块的流程图如下(图5-3):
图5-3 注册流程
在从服务器获取验证码时需要查询该手机号是否之前已经注册过,如果注册过可以直接进入登陆界面进行登录;如果没有注册过再发送注册验证码,进而继续进行注册流程的其他步骤。
5.2.2 登陆模块
登陆模块的流程图如下(图5-4登录流程):
图5-4 登录流程图
登陆模块在进行验证帐号密码或者手势密码的步骤前先要查询本地缓存是否登陆过帐号,如果有登陆过账号并且该账号已经开启手势登陆功能,则进入手势登录界面;否则进入帐号密码登录界面,不同点是,如果上次有登陆过帐号,则默认已经输入上次登陆账号的手机号,用户只用输入密码就可以,是为了给用户更好的使用体验。
5.3 设置模块
设置模块入口在登录后默认首页右上角我的信息图标,包括设置个人信息(编辑姓名、性别、年龄、常用地址等,查看本账号手机号、爱心成长等级)、本地手势登录密码管理(开启和关闭手势登录、修改登录手势、忘记手势)、登录密码修改、我的朋友(通讯录朋友)、应用升级、退出当前登陆账号5个功能。
5.3.1 手势管理模块
手势管理的流程图如下(图5-5手势模块流程):
图5-5 手势模块流程图
手势密码管理模块的加入是借鉴当前手机APP的流行做法,在减少用户依赖键盘输入密码的同时,能够保证用户信息的安全性。手势管理设计上在用户第一次安装软件注册或者成功后弹出设置手势密码界面。此步骤可以跳过不设,在以后的使用中在“设置——手势密码——手势管理”中设置并开启手势密码登录功能。在手势密码修改功能下可以验证原手势密码并设置新的手势密码;若忘记原来的手势密码可以点击“忘记手势”来用账号密码重新登录,然后可以设置新的手势密码。
5.3.2 登录密码管理
APP登录密码管理模块包含两个子模块——A.密码修改;B.密码找回。
密码修改的流程图如下(图5-6):
图5-6 登录密码管理流程
密码修改需要先验证原密码,原密码输入正确后才能设置新密码。新密码设置成功后返回“我的”模块,不用重新登录。
找回密码的流程图如下(图5-7):
图5-7 密码找回流程
找回密码触发的事件有两个:
在帐号密码登录界面点击“忘记密码”,进入找回密码流程;
(1)之前用手势密码登录进入App,在密码修改的验证原密码界面点击“忘记密码”后进入密码找回流程。
(2)找回密码时,先输入要找回密码的帐号,向服务器发送请求查看该帐号是否已注册,如未注册则可以注册,或者是输入的帐号不正确;若账号已注册,则进入下一步向服务器请求找回密码的邮箱验证码,输入新密码及验证码,通过服务器验证后找回密码成功。
(3)找回密码成功后跳入帐号密码登陆界面,用新密码登录(不同于修改密码成功,修改密码成功后不需重新登录,只要在下次用帐号密码登录功能使用新密码即可)。
5.4 找回物品模块
在找回丢失物品模块,用户可以发布自己的丢失物品信息,可以选择城市、物品类别来浏览筛选条件下被捡到物品待认领的信息,点击某一条物品信息后会进入物品详情页,显示被捡到物品的详细信息以及发布该捡拾信息的热心用户的手机号和姓名(以用户设置为准),此时可以点击短信图标给对方发信息或是点击电话图标打电话给对方。
5.5 捡到物品模块
在捡到物品模块,用户可以发布自己捡到物品的信息,可以选择城市、物品类别来浏览特定筛选条件下的丢失物品列表。同样地,点击某一条物品信息后会进入物品详情页,显示他人丢失物品的详细信息以及发布该丢失物品信息的用户的手机号和姓名(以用户设置为准),同样有短信联系和电话联系两种联系方式可用于联系该用户。
5.6 正能量模块
“中国正能量”模块位于登录App首页,用于展示中国正能量资讯列表(只显示标题和时间,由后台数据库维护者收集的正能量的点滴感人事迹),点击某一项可进入资讯详情页,展示该讯息的详细情况。
6 数据库设计与实现
6.1 数据库概述
本平台数据库选用关系型数据库,此处在演示阶段采用MySql数据库,数据表有用户密码表、用户信息表、被捡到物品表、丢失物品表、物品详情表、资讯列表共6张表。各表关系如下(图6-1)所示:
图6-1 数据库表关系
6.2 数据库表结构
(1)用户密码表,用来存储注册用户的手机号、注册成功后系统分配的ID号、密码、安全邮箱帐号,其中手机号作为主键,如下表6-1 table_user_password表。
表6-1 table_user_password
字段名数据类型含义备注
phoneNum Char(11) 帐号(手机号)Primary Key
userId Char(8) 用户ID Not null
password Char(10) 密码Not null
mail Char(20) 邮箱号
(2)用户信息表,存储用户ID、姓名、性别、年龄、常用地址、帮助他人次数,其中用户ID作为主键,并作为外键引用自用户密码表(表6-1table_user_password),如下表6-2 table_user_info所示。
表6-2 table_user_info
字段名数据类型含义备注
userId Char(8) 用户ID Primary Key
name Char(8) 用户姓名
gender Number(1) 性别
age int 年龄
address Char(30) 常用地址
helpTimes int 帮助别人次数Not null默认为0
(3)已登记被捡到物品表,存储被捡到物品的分类号、城市代码、登记成功时系统分配的物品ID、登记日期、关键字。如下表6-3table_article_found所示。
表6-3 table_article_found
字段名数据类型含义备注
id Char(6) 物品ID Primary Key category Char(2) 分类号Not null
city Char(6) 城市编号Not null
date Data 等级时间Not null
keyWords Char(20) 物品关键字Not null
(4)已登记丢失物品表,存储丢失物品的分类号、城市代码、登记成功时系统分配的物品ID、登记日期、关键字。如下表6-3table_article_lost所示。
表6-4table_article_lost
字段名数据类型含义备注
id Char(6) 物品ID Primary Key category Char(2) 分类号Not null
city Char(6) 城市编号Not null
date Data 等级时间Not null keyWords Char(20) 物品关键字Not null
(5)物品详情表,存储物品的详细信息,如下表6-5table_article_info所示。
表6-5 table_article_info
字段名数据类型含义备注
id Char(6) 物品ID Primary Key
userId Char(8) 用户ID Not null
Character1 Char(50) 详情描述
Character2 Char(50) 物品特征
(6)中国正能量资讯信息表,存储资讯记录,包括资讯标题、资讯入库时系统分配的资讯ID号、资讯标题、登记日期、资讯的具体内容。这是数据库中唯一一个独立的表,不与其他表有主外键关系,如下表6-6 table_news所示。
表6-6 table_news
字段名数据类型含义备注
newsId Char(6) 资讯ID Primary key
title Char(20) 资讯标题Not null
time Date 发布时间Not null
content Char(500) 资讯内容Not null
7 服务器端设计与实现
※所有接口若上传userId 参数,说明需要该交易需要处于登录状态,否则不需要处于登录状态
7.1 密码部分
(1) 注册接口
客户第一次使用该系统时需要先注册为该平台用户,本接口用来在注册界面调用,客户端向服务器发送用户注册请求。
表7-1 注册接口请求数据
请求地址:/lostandfound/user/password/register
参数名数据类型长度备注
phoneNum String 11 手机号
password String 10(密码最短6位)登陆密码
dynCode long 6 验证码(后台暂不校验)
timeStamp long 时间戳(后台暂不校验)
服务器在接收到客户端的注册请求后解析用户输入的手机号和密码,经过验证后对该请求进行处理——(1)若为新用户,则向数据库中添加新记录,并返回给客户端resCode为0000;(2)若处理过程中发生错误导致数据库插入失败时,向客户端返回resCode为1002;(3)若数据库中已存在该手机号时,说明该用户之前已经注册成功过,返回1001 。
表7-2 注册接口返回数据
resCode String 4 返回状态码0000 ——注册成功
1001 ——该手机号已注册
1002 ——注册失败
resMsg String 20 交易信息同上
userId String 交易成功时返回用户Id
(2) 登录、验证接口
本接口是通过上传的手机号、登录密码来验证用户输入是否和服务器保存的一致,
用于校验用户身份,可用于两个功能:(1)用于用户登录时校验是否密码正确;(2)
在用户更改密码前校验原密码,以确定用户的合法身份。
表7-3 密码验证接口请求数据
请求地址:/lostandfound/user/password/verify
参数名数据类型长度备注
phoneNum String 11 手机号
password String 10 登录密码
timeStamp long 时间戳(后台暂不校验)
本接口返回情况有三种:(1)服务器校验成功时,返回resCode为0000,并返回
userId字段值为用户ID;(2)服务器从数据库查找不到该手机号记录时,返回resCode 为1001,代表该手机号未注册过;(3)服务器查询到输入手机号的记录,但与用户输
入的密码不一致时,返回resCode为1002 。
表7-4 密码验证接口返回数据
resCode String 4 返回状态码0000 ——验证成功
1001 ——手机号未注册
1002 ——密码不匹配resMsg String 20 交易信息同上
userId String 交易成功时返回用户Id,其他
情况该字段为空
(3) 修改密码
修改密码接口用于用户修改平台的登录密码。用户在修改登录密码前,客户端应控
制先调用密码验证接口(接口2),验证通过后在调用本接口。服务器通过更新数据库
中用户密码表中相应记录来更新用户登录密码。
表7-5 修改密码请求数据
请求地址:/lostandfound/user/password/modify
参数名数据类型长度备注
phoneNum String 11 手机号
userId String 6 用户ID(登陆、验证密码或注册
时服务器返回给APP的)newPassword String 10 新密码
timeStamp long 时间戳(后台暂不校验)
服务器更新数据库记录——(1)更新成功后返回resCode 为0000,;(2)记录更新失败时返回resCode 为1001,表示操作失败。
表7-6 修改密码接口返回数据
resCode String 4 返回状态
码0000 ——密码修改成功1001 ——密码修改失败
resMsg String 20 交易信息同上
userId String 交易成功时返回用户Id
(4) 获取找回密码邮箱验证码
用户忘记登录密码时调用本接口来获取重置密码的验证码,服务器要做两个工作——(1)向用户设置的安全邮箱发送一个重置密码的验证码;(2)返回给用户一个邮箱账号,以提示用户到特定邮箱查看和使用验证码。若校验成功返回resCode 为0000,并返回邮箱号,否则resCode为1001,并将返回邮箱号置为空。
表7-7 找回密码验证码请求数据
请求地址:/lostandfound/user/password/getdyn
参数名数据类型长度备注
phoneNum String 11 手机号
timeStamp long 时间戳(后台暂不校验)
表7-8 邮箱验证码接口返回数据
resCode String 4 返回状态
码0000 ——验证码获取成功1001 ——验证码获取失败
resMsg String 20 交易信息同上
mail String 返回用户设置的邮箱
(5) 重置密码接口
重置密码功能需要先调用获取邮箱验证码接口(接口4),成功后调用本接口进行用户登录密码重置。需要上传的参数如下表。
表7-9 重置密码请求数据
请求地址:/lostandfound/user/password/reset
参数名数据类型长度备注
phoneNum String 11 手机号
newPassword String 10 新密码
dynCode long 6 验证码(后台校对
123456)
timeStamp long 时间戳(后台暂不校验)
服务器校验用户输入的手机号、新密码是否符合规定、验证码是否与服务器发送的一致,验证通过后会更新用户密码表table_user_password 中记录,然后返回给客户端resCode 为0000,并返回用户ID;否则返回相应错误信息。
表7-10 重置密码接口返回数据
resCode String 4 返回状态
码0000 ——密码重置成功1001 ——密码重置失败1002 ——验证码错误
resMsg String 20 交易信息同上
userId String 交易成功时返回用户Id
7.2 个人信息
(1) 设置安全邮箱接口
该接口用来设置用户密码表table_user_password中“mail”字段,客户端应设计该步骤为必填步骤,不可跳过,以保证每个账号都可以使用密码找回功能。该字段值用于服务器发送重置密码验证码的目标邮箱。服务器接收到客户端请求后插入用户密码表table_user_password中“mail”字段值。插入成功返回resCode 为0000,否则为1001 。
表7-11 设置安全邮箱请求数据
请求地址:/lostandfound/user/password/setmail
参数名数据类型长度备注
phoneNum String 11 手机号
userId String 6 用户ID
mail String 25 邮箱
表7-12 设置邮箱接口返回数据
resCode String 4 返回状态码0000 ——邮箱设置成功
1001 ——邮箱设置失败resMsg String 20 交易信息同上
userId String 交易成功时返回用户Id
(2) 修改个人信息
该接口用于用户在“设置——个人信息”模块中修改个人信息。客户端上传参数包
括手机号、用户ID(表明该用户处于登录状态)、姓名、性别、年龄、常用地址6个字段,若用户未输入可置为“”。
表7-13 修改个人信息请求数据
请求地址:/lostandfound/user/info
参数名数据类型长度备注
phoneNum String 11 手机号
userId String 6 用户ID
name String 8 姓名
gender int 1男/0女
age int 年龄(10<=age<=100)
address String 30 用户地址
服务器接收到客户端请求后,解析出各字段的值,然后对应数据库表table_user_info 中插入一条数据,插入成功返回成功信息,附加用户ID作为校验;若插入失败则返回resCode 为1001 。
表7-14 修改个人信息接口返回数据
resCode String 4 返回状态
码0000 ——信息修改成功1001 ——信息修改失败
resMsg String 20 交易信息同上
userId String 交易成功时返回用户Id
7.3 查询物品
(1) 查询被捡到的物品列表
该接口在用户进入“LOST丢失”模块时调用,客户端上传城市编号和物品编号,服务器从被捡到物品表table_article_found 中查询符合条件的多个值,封装成一个Json 类型的字符串,返回给客户端。
表7-15 查询被捡到物品请求数据
请求地址:/lostandfound/article/found
参数名数据类型长度备注
cityId String 6 城市编码
category String 1 分类号
1 ——银行卡
2 ——书籍
3 ——衣服
4 ——电脑
5 ——钥匙
6 ——包
7 ——证件
8 ——宠物
9 ——U盘
10 ——钱夹
(2) 查询已登记遗失物品列表
该接口在用户进入“LOST丢失”模块时调用,客户端上传城市编号和物品编号,服务器从被捡到物品表table_article_found 中查询符合条件的多个值,封装成一个Json 类型的字符串,返回给客户端。
表7-16 查询已登记丢失物品请求数据
请求地址:/lostandfound/article/lost
参数名数据类型长度备注
cityId String 6 城市编码
category String 1 分类号
1 ——银行卡
2 ——书籍
3 ——衣服
4 ——电脑
5 ——钥匙
6 ——包
7 ——证件
8 ——宠物
9 ——U盘
10 ——钱夹
表7-17 查询物品列表返回信息
数据格式:{[json1],[json2],[json3],[json4]...}
resCode String 4 0000 ——查询成功
1001 ——查询失败
list id String 物品id *category String 1 分类号keyWords String 物品特征
resMsg String 同上
(3) 查询物品详情
表7-18 查询物品详情请求数据
请求地址:/lostandfound/article
参数名数据类型长度备注
phoneNum String 11 登录手机号
userId String 6 用户ID
articleId String 6 物品ID
表7-19 物品详情接口返回数据
参数名数据类型长度备注
resCode String 4 0000 ——查询成功
1001 ——查询失败articleId String 6 物品ID
character1 String 50 捡到或丢失物品时的情
形
character2 String 50 物品物品特征描述
userName String 8 发布者设置的名字
userPhone String 11 发布者的电话
resMsg String 同上
7.4 新闻
(1) 获取列表
用户进入手机客户端,登陆以后默认进入“中国正能量”模块首页,客户端首页展示服务器端收集的一些好人好事资讯的列表,列表项只显示标题和发布时间。
表7-20 查看资讯列表请求数据
请求地址:/lostandfound/news/list
phoneNum String 11 手机号
userId String 用户Id
服务器接收到客户端请求后,查询数据库表table_news 中存在的所有资讯记录的资讯ID、标题和发布时间,然后封装成JSONArray 类型返回给客户端。
表7-21 资讯列表接口返回数据
resCode String 4 0000 ——查询成功
1001 ——查询失败
list newsId String 资讯Id
time String 资讯发布时间title String 资讯标题
resMsg String
(2) 新闻详情
此接口在用户点击某一条中国正能量资讯时触发客户端发送获取资讯详情的请求,需要上传的参数包括手机号、资讯Item 中隐藏的资讯ID。
表7-22 查看咨询详情请求数据
请求地址:/lostandfound/news/info
phoneNum String 11 手机号
newsId String 资讯Id
服务器接收到客户端的请求后,根据上传的newsId 从数据库表table_news中查询出特定资讯的详情,包括ID、标题、时间、内容。查询成功后将返回查询成功,并将查询结果返回给客户端,否则返回resCode 为1001 。
表7-23 咨询详情接口返回数据
resCode String 4 0000 ——查询成功
1001 ——查询失败
resMsg String 同上
newsId String 资讯Id
content String 资讯详情
8 功能测试
开发完成后对本平台进行功能性测试,按照《5.1 Android客户端模块化分》针对每个模块中的各个功能点进行测试。
8.1 登陆注册模块测试
打开应用,进入如欢迎界面(图8-1)持续1.5秒后进入登陆界面(图8-2),在登录界面点击“马上注册”可进入注册界面。
图8-1 欢迎界面图8-2 登陆界面
(1)注册一个已存在的帐号
数据库中已存在帐号,如182********,应该提示该帐号应经注册,然后跳入登录界面,并且该帐号已经自动填入手机号输入框中。测试结果正确运行如下(图8-3)提示已注册,跳入登陆界面并且手机号自动填入。
图8-3 号码已注册
(2)注册新帐号。用一个新手机号182********进行注册,输入正确验证码后应该注册成功,进入设置安全邮箱页面以及其他步骤。测试结果如下,输入新手机号和正确验证码(图8-4)注册成功并进入设置安全邮箱页面(图8-5),设置邮箱完成后进行手势密码设置,选择“跳过”后进入主界面(图8-6)。
图8-4输入正确图8-5设置邮箱图8-4主界面
(3)登录
用已注册的帐号182********登录,是正确密码为qwerty,当输入错误密码应给出相应提示,输入正确密码后进入下一步。
经过测试,如下图输入错误密码的提示(图8-5),点击“知道了”后清空密码输入;输入正确密码后进入下一步。当本帐号第一次在该手机登陆时进入手势密码设置界面(图8-6),可以跳过,否则直接进入首页。
图8-5 错误密码提示图8-6登陆成功
(4)找回密码
在登陆界面点击“忘记密码后”进入找回密码功能。当输入一个未注册的号码后给出相应提示(图8-7)并进入注册界面,输入已注册号码后提示“已向xxxx邮箱发送验证码”,然后进行设置新密码(图8-8)。新密码设置成功后给出相应提示,并用新密码登录(图8-9)。
图8-7输入未注册号码图8-8已注册号码图8-9找回密码成功
8.2 失物招领模块测试
在主页下方点击“捡到”进入丢失物品列表,可以选择城市,物品类型然后点击“搜索”进行搜索,搜索结果将以列表形式展现(图8-10),点击某一项进入详细信息界面(图8-11)。
图8-10 失物列表图8-11详细信息
在列表页面点击“添加”可以发布捡到信息,必须填写完整否则给出相应提示(图8-12),填写完整后可已发布,发布成功后在“丢失”中可以选择相应城市和类别查到刚添加的信息(图8-13),但如输入信息包含中文会出现乱码现象(图8-14)。
图8-12完整性提示图8-13查到结果图8-14乱码
8.3 正能量模块测试
进入首页即显示正能量资讯列表(图8-15),点击某一条信息后进入咨询详情页面(图8-16)。
图8-15 资讯列表图8-15咨询详情
8.4 我的设置模块测试
8.4.1 个人信息
点击“个人信息”后,进入个人信息界面,显示用户信息,允许用户编辑修改的项目会有铅笔标志,点击编辑后可以修改;点击保存后可以保存当前信息。
图8-16 编辑个人信息图8-17个人信息修改成功
8.4.2 手势测试
手势管理页面手势开关显示当前手势设置情况,开启手势密码要经过两次输入手势,若两次输入不一致给出相应提示(图8-18);关闭手势密码要验证原手势密码,验证手势密码有5次输错机会,在限制次数内未输入通过则进入需要重新登录(图8-19、8-20)。
图8-19两次输入不一致图8-20次数限制图8-21超出次数限制
修改手势密码要验证原手机密码,然后设置手势密码,要求同开启关闭手势密码一致;点击忘记手势密码弹出对话框提示重新登录(图8-21)。
图8-21 忘记手势对话框
8.4.3 密码修改测试
修改密码要验证原登录密码,若原密码输入错误应给出错误提示(图8-22);原密码验证通过后设置新密码,新密码要输入两次以保证正确性,两次输入不一致时给出相应提示,并清空第二次输入密码(图8-23)。
图8-22 原密码错误图8-23 两次输入不一致
8.4.4 未开发模块
“应用升级”功能暂未开发,但模拟在点击该功能后,检查是否有新版本可供下载,若当前是最新版则给出相应提示提示(图8-24),若不是最新版弹出确认对话框(图8-25)。
图8-24 当前是最新版本图8-25 发现新版本
9 总结
基于Android系统的失物招领平台的设计与实现的课题涵盖了Android开发、网络通信、服务器开发三大模块。由于没有服务器开发方面的基础,最后采用Servlet完成服务器的功能。经过测试,前期设计已经完成,但在完成后发现此版本并非当初设计时预想的那样完美,主要存在以下几个问题。
(1)不支持多用户登录
本系统缓存文件采用SharePreference存储在APP安装目录下,而不是在本地数据库中——SharePreference采用“名值对”的形式将数据信息存储在一个.xml文件中,就像一个Map类型的数据,名字不能重复,不能存储多条用户数据。当登录另一个用户时,电话号码、用户ID等数据都将更新为新用户的信息,之前一个用户的信息将被覆盖。如果采用SQLite数据库可以实现多用户信息并存,但本系统未做考虑。
(2)安全邮箱设置后不可更改
本系统要求用户在注册成功后进行设置安全邮箱,安全邮箱在用户忘记登录密码时用来获取验证码从而重置登录密码。但是在“个人信息设置”模块中并未加入更改用户安全邮箱的入口——最初的考虑是,一个人很可能换过好几次手机号,但是邮箱帐号用的时间相对会长很多,所以不必更改安全邮箱帐号。
(3)没有失物和失主自动匹配算法
自动匹配算法是现在云计算、大数据的产物。就像QQ、微信、微博中推荐好友,推荐关注公众号——QQ可以根据大量的数据(你的好友的信息、你好友的好友的信息)推荐你添加可能认识的人;微博可以根据你平时浏览信息的频率和频道分布来推荐你关注的好友、频道等等。而本系统只是一个失物招领平台的雏形,没有大量的数据,也没有成熟的匹配算法,所以没有加入类似的失物招领和发布时及时匹配推荐信息的功能,但肯定的是,这个自动匹配算法对与本系统是有很大的帮助作用,能极大地提高用户体验,提现移动互联网的便捷特性。
(4)物品信息数据库设计简单
数据库的设计管理涉及到生活中的方方面面,并且是一个即为庞大的学科,包含归纳学、数学分析、信息分类、信息分割和重组、管理学、统计学等许多学科。要设计一个高效合理的数据库,需要多方面的信息总和和很高的管理学知识。
以本系统中丢失物品、捡到物品的数据库设计就需要很高的技术才能设计一个高效
合理的数据库。物品有很多种类如本系统抽象出来的书籍、证件、电脑、衣服、宠物等等,不同类别之间有很大的不同。书籍的信息包括书名、出版商、版本、图书分类号等,证件有证件类型、所属单位、证件持有人等信息。若想把这些数据统筹规划,存储在数据库中,并能够高效率的进行修改和查找是很难的。如果为每个类都建一张数据表,明显数据库中的表过于繁杂,并且有个很大的问题就是,你不能保证你能找到所有的类;但如果建少量的表,各类物品的不同属性信息又很难整合到少数表中,在进行信息匹配时很难做到准确匹配。
综上所述,本系统作为一个演示App,只建了一个简单的表结构来存储各类物品信息,只是为了演示本系统的可行性,实际性能行需求在后续开发中可以不断提升。(5)数据传输过程中没有加密
在互联网高速发展的今天,网络上的数据成几何倍数增长,不少心存歹意的人将目光瞄向了网络数据的窃密上边来。他们通过截获网络传输报文,破解报文信息,或利用这些信息来威胁或进行诈骗用户,或出卖用户信息来获取利益,或者是向用户发送垃圾广告信息等获取不法利益。
所以现在只要接入互联网的报文数据信息,都需要一套完整的数据加密、解密规则,一方面能够保证用户的信息和财产安全,另一方面能够减少服务器受到的攻击机率。但是在本课题的设计中,该平台只作为演示之用,暂不考虑信息安全性,只验证平台的功能性需求是否能够完成,故而没有信息加密传输模块。但可以肯定的是,将来平台正式上线时,数据安全模块必然是考虑的重点之一。
(6)本APP未考虑的一个找回物品类型
本平台没有加入现在用户群最广泛的一个物品类——手机。如果你的手机不慎遗失,那就只能“呵呵”了!因为如果手机被某人捡到,而人家还有心还给你,其实是很容易的——坐等失主发电话来就是了;如果捡到的人不够高尚不想还给你,你也就不用费劲发布信息了。
参考文献
[1] 李欢.捡东西成累赘?探访失物招领现状[N].大河报,2015-01-06(2)
[2] 李刚.疯狂Android讲义[M].北京:电子工业出版社,2013
[3] 耿海宵,张丽梦.校园失物招领系统设计[J].Silicon Valley,2012,(4)
[4] 董伟东.失物招领系统的建立[J].计算机光盘软件与应用,2014,(1):251-252
[5] Lübke, Robert1;Schuster, Daniel; Schill, Alexander..A framework for the development of mobile social software on android [C].Mobile Computing, Applications, and Services - Third International Conference, MobiCASE 2011,(3):207-225
[6] 袁伟华.多线程技术在Android应用程序与服务器通信的应用[J].电脑编程技巧与维护,2014,(4)
[7] 卜炟编.开发参考:JSTL网络标签与SSH类参考手册[K].北京:中国铁道出版社,2010
[8] Chandrashekar; Sushruth.Android application for school of art and design[D].San Diego State University,2014
[9] Scott Oaks,Henry Wong.Java Threads[M].O’Reilly,2004
[10] 上海杰普教研组.Android高级编程[M].上海:上海杰普,2014
[11] 曹海英,元元.基于Android系统的移动校园信息平台设计[J].赤峰学院学报(自然科学版),2014(21)
致谢
作者在设计(论文)期间都是在宋春花教授全面、具体指导下完成进行的。宋老师渊博的学识、敏锐的思维、民主而严谨的作风使学生受益非浅。设计期间得到上海杰普尹珂男老师的帮助,期间尹老师在业余时间给了我很多技术上的帮助,并给了很多专业的指导意见,在设计中起到了很大的帮助作用。
感谢宋春花副教授和尹珂男老师在毕业设计工作中给予的帮助。
感谢我的学友和朋友对我的关心和帮助。
外文翻译
外文原文
Application components are the essential building blocks of an Android application. Each component is a different point through which the system can enter your application. Not all components are actual entry points for the user and some depend on each other, but each one exists as its own entity and plays a specific role—each one is a unique building block that helps define your application"s overall behavior.
There are four different types of application components. Each type serves a distinct purpose and has a distinct lifecycle that defines how the component is created and destroyed.
Here are the four types of application components:
Activities
An activity represents a single screen with a user interface. For example, an email application might have one activity that shows a list of new emails, another activity to compose an email, and another activity for reading emails. Although the activities work together to form a cohesive user experience in the email application, each one is independent of the others. As such, a different application can start any one of these activities (if the email application allows it). For example, a camera application can start the activity in the email application that composes new mail, in order for the user to share a picture.
An activity is implemented as a subclass of Activity and you can learn more about it in the Activities developer guide.
Services
A service is a component that runs in the background to perform long-running operations or to perform work for remote processes. A service does not provide a user interface. For example, a service might play music in the background while the user is in a different application, or it might fetch data over the network without blocking user interaction with an activity. Another component, such as an activity, can start the service and let it run or bind to it in order to interact with it.
A service is implemented as a subclass of Service and you can learn more about it in
the Services developer guide.
Broadcast receivers
A broadcast receiver is a component that responds to system-wide broadcast announcements. Many broadcasts originate from the system—for example, a broadcast announcing that the screen has turned off, the battery is low, or a picture was captured. Applications can also initiate broadcasts—for example, to let other applications know that some data has been downloaded to the device and is available for them to use. Although broadcast receivers don"t display a user interface, they may create a status bar notification to alert the user when a broadcast event occurs. More commonly, though, a broadcast receiver is just a "gateway" to other components and is intended to do a very minimal amount of work. For instance, it might initiate a service to perform some work based on the event.
A broadcast receiver is implemented as a subclass of BroadcastReceiver and each broadcast is delivered as an Intent object. For more information, see the BroadcastReceiver class.
Content providers
A content provider manages a shared set of application data. You can store the data in the file system, an SQLite database, on the web, or any other persistent storage location your application can access. Through the content provider, other applications can query or even modify the data (if the content provider allows it). For example, the Android system provides a content provider that manages the user"s contact information. As such, any application with the proper permissions can query part of the content provider (such as ContactsContract.Data) to read and write information about a particular person.
Content providers are also useful for reading and writing data that is private to your application and not shared. For example, the Note Pad sample application uses a content provider to save notes.
A content provider is implemented as a subclass of ContentProvider and must implement a standard set of APIs that enable other applications to perform transactions. For more information, see the Content Providers developer guide.
A unique aspect of the Android system design is that any application can start another application’s component. For example, if you want the user to capture a photo with the
device camera, there"s probably another application that does that and your application can use it, instead of developing an activity to capture a photo yourself. You don"t need to incorporate or even link to the code from the camera application. Instead, you can simply start the activity in the camera application that captures a photo. When complete, the photo is even returned to your application so you can use it. To the user, it seems as if the camera is actually a part of your application.
When the system starts a component, it starts the process for that application (if it"s not already running) and instantiates the classes needed for the component. For example, if your application starts the activity in the camera application that captures a photo, that activity runs in the process that belongs to the camera application, not in your application"s process. Therefore, unlike applications on most other systems, Android applications don"t have a single entry point (there"s no main() function, for example).
Because the system runs each application in a separate process with file permissions that restrict access to other applications, your application cannot directly activate a component from another application. The Android system, however, can. So, to activate a component in another application, you must deliver a message to the system that specifies your intent to start a particular component. The system then activates the component for you. Activating Components
Three of the four component types—activities, services, and broadcast receivers—are activated by an asynchronous message called an intent. Intents bind individual components to each other at runtime (you can think of them as the messengers that request an action from other components), whether the component belongs to your application or another.
An intent is created with an Intent object, which defines a message to activate either a specific component or a specific type of component—an intent can be either explicit or implicit, respectively.
For activities and services, an intent defines the action to perform (for example, to "view" or "send" something) and may specify the URI of the data to act on (among other things that the component being started might need to know). For example, an intent might convey a request for an activity to show an image or to open a web page. In some cases, you can start an activity to receive a result, in which case, the activity also returns the result in
an Intent (for example, you can issue an intent to let the user pick a personal contact and have it returned to you—the return intent includes a URI pointing to the chosen contact).
For broadcast receivers, the intent simply defines the announcement being broadcast (for example, a broadcast to indicate the device battery is low includes only a known action string that indicates "battery is low").
The other component type, content provider, is not activated by intents. Rather, it is activated when targeted by a request from a ContentResolver. The content resolver handles all direct transactions with the content provider so that the component that"s performing transactions with the provider doesn"t need to and instead calls methods on the ContentResolver object. This leaves a layer of abstraction between the content provider and the component requesting information (for security).
中文翻译
Android的核心功能之一就是一个应用程序可以使用其它应用程序的元素(如果那个应用程序允许的话)。比如说,如果你的应用程序需要一个图片卷动列表,而另一个应用程序已经开发了一个合用的而又允许别人使用的话,你可以直接调用那个卷动列表来完成工作,而不用自己再开发一个。你的应用程序并没有吸纳或链接其它应用程序的代码,它只是在有需求的时候启动了其它应用程序的那个功能部分。
为达到这个目的,系统必须在一个应用程序的一部分被需要时启动这个应用程序,并将那个部分的Java对象实例化。与在其它系统上的应用程序不同,Android应用程序没有为应用准备一个单独的程序入口(比如说,没有main()方法),而是为系统依照需求实例化提供了基本的组件。共有四种组件类型:
活动(Activities)
一个 activity 代表用户界面的一个独立屏幕。例如,一个邮件应用程序应该有一个activity 用于显示新邮件列表,另一个activity 用于撰写一封邮件,还有一个activity 用于读取邮件。尽管所有activitie 协同工作以构成邮件应用程序的用户体验,但彼此之间相对独立。应次,不同的应用程序能够从任何一个activity 启动(只要邮件应用程序允许)。例如,用户需要分享一张照片,一个拍照应用程序能够启动邮件应用程序的activity 。activity 是一个实现了 Activity 的子类,你可以在 Activities 开发者指导部分了解更多。
服务(Services)
service 是在后台运行,执行长时间操作或者执行远程操作。service 不提供用户界面。例如,当用户在另一个应用程序时,一个service 可在后台播放音乐,或者是从网络上获取数据,而不阻断用户与当前activity 的交互。其他组件,比如一个activity ,为了与该service 互动,可以启动或者绑定它。
service 是一个实现了 Service 的子类,你可以在 Services 开发者指导部分了解更多。广播接收器(Broadcast receivers)
广播接收器是一个专注于接收广播通知信息,并做出对应处理的组件。很多广播是源自于系统代码的──比如,通知时区改变、电池电量低、拍摄了一张照片或者用户改变了语言选项。应用程序也可以进行广播──比如说,通知其它应用程序一些数据下载完成并处于可用状态。
应用程序可以拥有任意数量的广播接收器以对所有它感兴趣的通知信息予以响应。所有的接收器均继承自BroadcastReceiver基类。
广播接收器没有用户界面。然而,它们可以启动一个activity来响应它们收到的信息,或者用NotificationManager来通知用户。通知可以用很多种方式来吸引用户的注意力──闪动背灯、震动、播放声音等等。一般来说是在状态栏上放一个持久的图标,用户可以打开它并获取消息。
内容提供者(Content providers)
内容提供者将一些特定的应用程序数据供给其它应用程序使用。数据可以存储于文件系统、SQLite数据库或其它方式。内容提供者继承于ContentProvider 基类,为其它应用程序取用和存储它管理的数据实现了一套标准方法。然而,应用程序并不直接调用这些方法,而是使用一个ContentResolver 对象,调用它的方法作为替代。ContentResolver 可以与任意内容提供者进行会话,与其合作来对所有相关交互通讯进行管理。
参阅独立的内容提供者Content Providers 章节获得更多关于使用内容提供者的内容。
每当出现一个需要被特定组件处理的请求时,Android会确保那个组件的应用程序进程处于运行状态,或在必要的时候启动它。并确保那个相应组件的实例的存在,必要时会创建那个实例。
Android系统设计的一个独特方面是任何的一个程序都可以启动另一程序的组件。比如,你想让你的程序可以使用照相机拍照,如果已经有了实现这种功能的程序并且你你的程序能使用它(有权限),那么你就没有再要再写一个新的Activity来实现这个功能。你的程序不需要包含或者链接这个拍照程序。相反,你只需要在你的程序中打开这个拍照程序中的实现拍照功能的Activity。当拍完之后,拍好的照片甚至会自动返回给你的程序。者对于用户来说,就好像是想拍照功能的程序就是你的这个程序的一部分一样。
当系统启动一个组件之后,如果这个组件所在的程序之前没有运行的话,系统会自动开始这个程序的进程,并初始化这个组件所需要的相关类。比如,你的程序开启了一个拍照功能程序的Activity,这时系统会启动这个Activity所在的程序,所以这个Activity 运行在拍照功能的程序当中,而不是在你的程序中。所以,不像其他操作系统的中的程序一样,Android程序没有一个单独的入口点(比如没有我们常见的main()函数)。
因为系统中的程序运行在自己的独立进程中,并且程序中的文件都有自己的限制其
他程序访问的权限,所以,你的程序不能直接激活其他程序中的组件。但是Android系统就可以。具体是这样的实现的,为了激活(activate)其他程序中的组件,你必须向系统发送一个消息来详细说明你要启动其他组件的意图,这样系统才会为你激活这个组件。
推荐访问:太原理工大学论文提交平台 失物招领 毕业设计 设计
[毕业设计——基于Android系统失物招领平台设计与实现:]相关文章
- 【太原理工大学学位论文格式】太原理工大学
- 【毕业论文提交前,花点钱先“检测”】
- [1210317609263工程硕士学位论文提交申请表]
- [太原理工大学硕士论文写作规范]参考文献
- [长春理工大学论文要求]长春理工大学毕业学分
- 【太原理工大学毕业论文答辩模板】
- 太原理工大学研究生官网【太原理工大学离校申请书.】
- [2015年太原理工大学教师专业技术职务聘任条件]中国考研十大黑校
- 论文写作的注意事项【学位论文提交注意事项】
- 太原理工大学论文答辩PPT
- “四课法”本科毕业设计专题指导研究与实践
- 建筑环境与设备工程专业毕业设计培养模式的创新和实践
- 语文教学设计方案参考
- 设计师个人工作总结模板5篇
- 小雪花教师教学设计方案3篇
- 大学生结构设计大赛材料力学性能试验研究
- 一个工业设计师的环保账
- 自动成卷系统的设计与应用
- 2022年度水利设计院工作总结【优秀范文】
- 基于TRF3765的本振源设计
- 基于DSP Builder的DDS设计与实现
- 关于提高电子设计大赛指导实效性的思考