Android毕业设计-微圈

去年作了一个相似于个人朋友圈的项目,主要功能就是用户能够实时发表本身的动态,好友能够评论点赞什么的,能够建群,聊天啊,拉黑啊,反正是一个不错的社交软件,包含服务端和客户端,服务端是jsp,客户端不用说固然是android啦。php

先上几张图涨涨眼球:java

 

废话很少说,直接上设计(也就是当时的论文,我这我的比较懒,直接粘贴过来了,不过文字好粘贴,图片但是太难弄了,一张一张的 ,,呜呜呜。。。。):android

 

安卓交互软件-微圈的设计与实现程序员

摘要 

咱们己经迈进移动互联网时代,手机己经成为了咱们不可或缺的工具。手机客户端也迎来井喷发展期,如今只要是有点规模的学校或组织都但愿能有一个属于本身的手机应用来达到他们的盈利、宣传等目的。由于手机的便携性,安装在手机上的手机应用的使用频率很高,同时它的卸载率也比电脑上的应用要高,所以,设计并实现一个用户满意度高、使用方便的手机应用对学校来讲颇为重要。web

    本文结合本实验室与学校合做的实际项目,设计并开发了一款基于安卓的移动客户端系统,包括手机应用以及相应的服务器端接口的开发。根据学校的提出的实际需求,咱们进行了需求分析并进行了模块划分与开发流程的设计,模块划分为:登陆注册模块、朋友圈模块、扫描二维码模块和客服公告模块,每个模块都对应一个或几个服务器端接口,服务器端接口使用JAVA语言实现,运行环境使用了Tomcat,数据库使用的是开源的MySQL。本文主要完成的工做有:安卓应用软件界面设计、安卓应用软件各个功能模块的开发、数据库的设计服务器端接口的设计与实现。本文介绍了各个模块的实现方法,利用流程图和关键代码的方式对各个功能模块进行了详细说明,针对比较有表明性的模块,例如登陆注册模块和朋友圈模块,进行了比较详细的介绍,同时针对模块中比较重要的功能,例如,上拉刷新,下拉加载更多,双击退出应用程序等功能,进行了比较详细的讲解,包括它们的实现原理以及关键代码实现细节。本文设计了手机端软件和服务器端的框架,具备良好的扩展性和通用性,可以比较低成本的快速的进行二次开发。咱们介绍客户端软件时,由于各个功能模块相对比较独立,咱们介绍的比较详细,对服务器端各个接口的设计与实现只详细介绍了一下登陆注册模块对应的接口实现,由于各个接口的设计与实现的思路大致相差很少,针对数据库的设计咱们只重点介绍了最终的全部表的结构和数据类型,由于篇幅和重要度相比其余稍低等缘由,咱们对它的具体中间设计细节没有进行更多的讲解。chrome

    最后对系统的每一个功能模块和用户界面分别进行了测试,尽量发现系统的问题并进步完善系统。在开发的末期,咱们开发人员己经进行了白盒测试,本身感受没有问题后找了几个未参与开发的同窗们从用户的角度进行了黑盒测试。目前本移动客户端软件系统己经被某学校实际使用中,系统的使用反馈良好,可以较好的知足学校和用户的使用需求。数据库

 

关键词: 安卓,移动客户端,服务器端接口,朋友圈,系统开发编程

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

第1章绪论

1.1课题的研究背景与意义

    本课题根据某学校提出的具体需求研究了移动客户端系统的总体设计与实现,包括手机客户端的界面设计,功能设计,功能实现与对应的服务器端的接口设计与实现。设计模式

1.1.1国内外移动客户端发展示状

随着移动终端市场的发展以及人们对移动手机依赖性的提升,用户对安装在手机的各种应用的需求也愈发旺盛。手机应用之间的竞争愈来愈激烈,只有那些提供更加友好的界面,而且可以知足用户的使用需求的应用软件才能存活下来。移动客户端通常要依托服务器才能正常运行,在手机上更加方便的完成一些互联网需求,例如国外的NBA视频客户端和国内的阿里巴巴手机客户端。浏览器

近年来,智能手机快速发展,移动互联网业务不断发展。人们己经习惯于利用手机完成各类之前须要在电脑上完成的任务,例如网上购物,使用手机客户端进行网上购物的用户规模逐年上升,大有超过使用电脑网上购物的用户规模的趋势。本文以实际的学校移动项目为背景,对安卓移动软件的通常架构设计及其中的关键技术进行了深刻探讨。

1.1.2国内外移动应用软件开发状况

对手机软件编程人员来讲,比较关心的是什么样的手机系统更有市场,什么样的手机系统拥有更多用户。当今,占有绝大部分移动操做系统平台市场份额的有苹果学校的IOS,谷歌学校的Android及微软学校的Windows Mobile 。从2009年以来,Android操做系统成为了开发者最受欢迎的系统,由于其开源性的特色,开发安卓应用程序软件具备很好的市场价值,同时安卓系统的手机也被众多国内外手机厂商青睐,例如国外的三星和国内的华为、中兴、小米等。

安卓开发的另外一个特色是它大部分只须要使用JAVA开发语言就能够,一部分涉及底层的须要经过JNI使用C/C++语言生成库文件被使用,这使得开发人员很容易就能够熟悉它的开发流程,安卓系统是一个彻底开放的平台,能够彻底接纳第三方软件,开发者能够利用网上众多的开源代码,开发出本身须要的应用,使得开发者拥有了史无前例的自由发挥空间,Android这几年井喷之势和它的迅速占领市场离不开它的开源性和免费的服务平台。

 

1.2 课题任务

1.2.1课题意义

现在,3G, 4G网络正在全国范围内快速普及,手机产品也正在经历着变革似的快速发展,手机所能完成的任务也愈来愈多,例如,听歌、看电影、网上购物和在线支付等,手机的硬件,例如屏幕、CPU, GPU等,更新换代迅速,所以手机软件研发的快速跟进是形势所趋。随着Android平台的市场份额逐渐攀升,安卓系统下的应用程序的数量和质量都在发生着突飞猛进的变化。由于安卓开源性的缘故,安卓手机开发人员相比其它系统来讲能够更加快捷的开发手机应用,开发者能够利用他人公布出来的成果,也能够利用本身之前开发的成果进行新的开发,这使得手机的开发更为灵活,工做量大大的减少了,同时用户在这款开放性的平台上能够最大限度的设计和实现本身想要实现的功能。

和前些年每一个学校或组织都须要一个有本身特点的网站同样,进入移动互联网时代后,如今的学校和组织很是热衷于拥有一款专门为本身学校正制的安卓应用,来达到宣传或者其它一些目的。设计并实现一套扩展性和方便二次开发的移动客户端软件系统拥有巨大的潜力,如今各大学校都有了功能和性能比较完善的安卓应用,例如腾讯QQ手机客户端、淘宝客户端,可是普通学校的移动客户端还并无普及,为了弥补安卓客户端的这一短板,咱们依托某学校的实际项目,设计并开发一款扩展性良好,能够用于二次开发的安卓客户端应用系统。

1.2.2本人承担的任务

在客户端应用系统的开发过程当中,本人承担了以下几部分工做:

(1)与学校人员协商并制定了需求分析并完成了需求详细文档的编写;

(2)独立完成了功能模块的划分和服务器接口的设计;

(3)全程参与了客户端各个阶段的代码开发与界面设计工做;

(4)主导并参与了应用系统的各个模块的测试工做;

(5)总结分析出应用系统的一些BUG并进行了修正。

1.3论文结构

本文主要分为六章内容:

第1章绪论。系统地介绍了本文所涉及的开发技术基础知识、本客户端系统开发的目的和意义,最后介绍了本人在整个开发过程当中所作的主要工做。

第2章介绍了安卓客户端系统开发相关技术。详细说明了重点技术知识点,包括它的实现原理与应用场景,介绍了安卓操做系统的发展背景、安卓整体框架的层次设计与安排以及安卓开发过程必需要用到的重要知识点。

第3章移动客户端软件系统的需求分析。说明了整个客户端系统的需求,包括手机客户端与服务器端接口,认真分析了这些需求后制订了一系列整个系统的开发步骤。总结并画出了开发过程流程图,明确了移动客户端软件的各个模块所须要完成的功能。

第4章移动客户端软件系统的设计与实现。根据划分好的各个模块,明确了各个模块的开发流程,设计了各个模块的实现流程图、进行了相关的服务器端数据库设计与服务器端接口的设计,完成了各个功能模块的开发工做,详细介绍了重点模块的开发细节和重点服务器端接口的实现过程。

第_5章移动客户端软件测试。介绍了测试平台的硬件和软件环境,对移动客户端系统进行了实际运行测试,获得了测试结果。

第6章是结束语。对论文进行了工做总结,说明了本文所取得的成果,系统的介绍了本文所完成的工做并展望了进一步可能研究的内容。

第2章安卓客户端系统开发相关技术介绍

2.1安卓操做系统相关背景

Android是一款基于Linux平台的操做系统「,它是Google学校于2007年11月5日公开发布的。该平台由四部分组成:应用、界面、操做系统和中间控件,是针对移动终端开发出的一款开放式平台,因为其使用了Linux内核,软件移植将大大下降难度。底层采用Linux内核提供系统的基本功能,应用软件开发发布的规则很是简单,没有采起像苹果学校那样的相对严格的条例,容许各个开发学校或者是我的自行进行研发,开发应用程序的语言能够用Java或者利用JNI使用C/C++进行编写本地代码。Android开发平台和其余平台相比具备明显的优点圈:

(1)     开放性:开放性是Android系统相比其它系统来讲最吸引人的特征。Android系统所具备的开放性可让不少的手机制造厂商和我的加入Android平台生态圈中,这样,手机在Android系统的支持下,硬件飞速发展,应用迅速增多,用户愈来愈多,应用程序的功能愈来愈新颖, Android系统近年的飞速发展己经使它成为成熟的开放性平台。

(2)     不被运营商所限制:Android在国内上市并普及后,手机上网用户可以简单方便快捷地经过安卓应用链接到互联网,大大下降了通讯运营商对它的限制。而且随着W IFI上网热点愈来愈多,移动通讯网络的普及与升级,使用户能够经过手机应用享受更多互联网服务。

(3)     丰富的硬件选择:安卓系统具备开放性这一优点促使众多手机开发商都来开发安卓系统手机,这也直接促进了一大批手机厂商的发展,例如国内的华为、中兴、小米等。手机硬件所以快速发展,例如高通处理器的更新换代,手机屏幕的发展等,最近,连PC处理器的巨头Intel也积极的专门为手机研发多款处理器。目前手机的硬件己经达到了史无前例的水准,用户也体验到了更多高质量的服务。

(4)     开发商再也不受到制约:Android平台拥有的开放特性提供了公平自由的环境,手机厂商不会由于本身规模的大小等缘由而受到任何不公平待遇。这使得手机厂商踊跃加入,也催生了一些新生厂家,例如国内的小米学校。各式各样的软件也如雨后春笋通常地出现。虽然过于开放性的特色使得一些不健康应用,例如,色情、暴力、恶意软件等,没法从源头上制约,但能够经过发布平台的严格审核来制约。

(5)     与Google应用程序的兼容:Google学校是互联网行业的巨头,Google的业务范围己经不只仅限于网络搜索方面,还包括不少其它业务,例如,Gmail邮箱、云计算、地图等。Google旗下的一系列优秀的软件己经拥有了全球很大的用户群。Google发布了Android }  Google平台的绝大部分软件都有安卓版本,可以在安卓平台上安装,给用户提供了极大的便利条件[6]。

2.2安卓系统架构框架

本节介绍了安卓系统的整体框架。Android整体架构如图2.1所示,从图中咱们能够看到,android系统的架构设计为分层模式,从上到下一共分为四层。核心操做系统底层、系统支持库层、安卓应用框架层以及应用和小部件层。

2.2.1安卓软件开发相关技术

核心操做系统底层:该层主要负责系统相关的最基本的功能,例如内在管理、系统安全相关、电源驱动管理以及一些重要硬件的底层驱动软件等。Android的核心操做系统底层为Linux核心,Android底层还须要为手机等移动端设备中的各个模块编写特有的驱动程序来作支持。所以操做系统层包括Linux核心和驱动程序两大部分。

系统支持库层:该层为Android系统的中间件层,该层有库和安卓系统所须要的运行环境组成。跟之前非Android系统移动设备的嵌入式系统比较,Android的这一层显得比较清晰明了。本层经过C语言的标准库来实现,是整个Android系统中最底层的库,能够被上层调用。这层包括Media Framework,  SQLite,OpenGL,  FreeType,  WebKit等。

在Android中,拥有各类功能的库和移动设备的系统平台关系紧密,这些各类功能库利用中间插件共同工做发挥巨大的做用。Android最初设计时就强调用户体验的优先性高于手机性能,这种理念当时是颠覆性的,不过期间和结果证实了这个理念的正确性。硬件一直在飞速发展,有些关键硬件甚至一直保持着摩尔定律,随着硬件性能的飞速增加,手机性能己经远远高于最初的设备性能,达到了系统性能和用户体验的双赢。

应用框架层(Framework Application):

应用程序的框架主要功能和目的是为开发者提供服务。一些包含各类用户界面程序的控件就处在这层当中,例如,列表(List)、栅格(grids)等。开发人员在开发应用程序的时候,组件能够在应用程序之间被相互调用,这个特性使得应用开发能够更加省时省力。例如,应用程序须要显示一个能够显示待办事件功能组件,而另外一个应用程序己经开发了具备此功能的组件,并对外发布了此组件,开发者能够直接调用该组件而不用再重复开发。关于组件的功能以及他们的做用原理将会在下一节进行详细介绍。

应用和小部件层:

该层包括本身开发的或者系统自带的应用界面以及应用的全部功能。这层是和使用用户打交道的,所以也十分重要。通常说,一个程序的应用层开发不只会使用JAVA语言来完成,还一部分是用JNI来使用C/C++来完成,这一部分生成动态连接库以便被JAVA层使用,最后编译经过后会在Ecfipse中自动生成

安卓安装包,也就是咱们熟悉的APK文件,这个APK能够签名后直接发布。Android系统直接提供了不少基本的应用程序,如主屏幕(Home),短信息(Messago),拨号((C all)等等,除此以外开发者还能够利用该层提供的其它应用接口开发出本身的程序,例如UC浏览器等。原生Android系统通常内置Google的应用框架,全部新开发的程序也会处于这一层,如Google自己具备的同步功能、Email、地图和程序员开发的手机QQ、搜狗输入法等应用软件。

2.2.2基于组件的开发

比较重要的四大组件包括:Activity, Broadcast, lntent Receiver , Service,ontent provider。接下来的内容咱们主要介绍一下它们的基本原理。

Activity(活动):

Activity是一种可视化用户活动界面。它是咱们应用程序的主要组成部分,一些实现代码就是以Activity的形式向用户展现的,它包含界面部分和代码实现部分,界面部分与代码部分分离开来,在代码部分直接选择显示那个界面,代码部分还能够完成全部咱们想要完成的功能,例如显示图片功能、拨打电话功能、地图定位功能等等。Activity咱们能够当作是一种可编程的用户界面,用户经过在用户界面触摸、点击等发出操做信息,在Activity代码中能够监听并接收这些信号以执行用户所请求的操做。例如,点击按钮跳转到另外一个界面,显示图片,向指定联系人拨打电话等。任意一个Activity均可以单独实现本身的功能,多个Activity能够互相创建起联系,最终一个应用总体是经过一个或多个以Activity为基类的子类来具体实现应用的各个模块功能的。Activity的生命周期对于彻底理解Activity的使用方法是相当重要的,Activity生命周期图如图2.2所示:

 

 

 

Broadcast lntent Receiver(广播):

Broadcast Intent Receive:的功能是接收各类己经发布广播,而且能够发送广播。例如,在音乐播放器应用中,音频文件播放完成后,该功能模块发送广播,其它全部关联它的组件或功能模块会接收到它所发送的广播,接收到后自动进行相关的方法,在这个方法中能够进行任何想要完成的代码,一个应用不只仅能够拥有一个广播,能够有多个广播接收器来同时接收多个不一样功能类型的广播。每一个接收器都必需要继承于BroadcastReceiver类。例如本文中客户端实现双击退出应用程序功能时就用到了广播,该内容会在后面的章节详细介绍

Service(服务):

Service组件和Activity相似,也是完成一些开发者想要完成的功能,惟一的区别在Service通常不关心界面是如何的,也就是它只完成功能,不完成界面的绘制,它老是长时间的在后台运行,完成须要在后台操做的功能。Service的生命周期包括三个过程:服务建立、服务开启和服务销毁。Service分为两种类型:本地服务和远程服务,前者用于应用内部,后者主要用于安卓系统内部的应用之间。其进程模型是能够配置的,这个组件运行在同一进程中仍是不一样进程下都是能够的,彻底取决于调用方和发布方的决定,当服务和服务调用者不在同一个进程的话就须要部署一些通讯机制来保证它们以前的通讯畅通。

Content Provider(内容供给者):

Content Provider主要功能是提供数据等内容给应用程序,使用这个组件时,开发人员须要定义一个继承自Content Provider基类的自定义类并实例化,而后全部的操做都得使用这个实例化对象来完成,不能直接调用,这个对象在调用内容的时候与内容供给者经过数据相互传输造成会话,相互协做完成相应的功能。

2.2.3存在于各组件间调用过程

Android的系统模块架构是以组件部分为基础的「。Intent(意图)对组件来讲是很是重要的,它能够当作是组件以前沟通交流的桥梁,也能够当作是链接组件的桥梁。Intent Filter是为了Intent而设计,它的功能是组件反馈本身能响应或处理哪些Intent请求行为或请求数据。下面将介绍Intent, Intent-Filte:和组件之间的关系以及它们相互影响工做的原理。Intent(意图)能够使用Context.StartActivity()或者Activity.sta}tActivityForResult()来启动指定的Activity(活动),通常是经过活动的类名来启动,被启动的活动能够调用getIntent()来获取启动者的Intent。启动者和被启动的活动能够经过putExtra()和getIntent().getStringExtra()等方法进行界面之间的参数传递;Intent的应用很是普遍,例如,从一个应用界面跳转到另外一个应用界面,只须要使用Context.StartActivity()而后指定要启动的活动的类名就能够了。Intent对象还经常使用于发送接收广播时的情形,例如在应用接收广播后会自动调用广播类的onReceive0方法去执行,这时Intent对象也会传递过来。Intent Filte:即意图过滤器,它是用来描述指望可以响应什么的Intent过滤,经过这个设计模式,全部的组件都经过系统核心模块来进行中转,组件之间能够通过Intent  Filte:过滤后再接触,不须要直接接触,使结构更加清晰。多个Intent Filte:构成一个不一样的响应能力集合来完成为意图提供多个过滤。在没有定义任何Intent Filte:的状况下,Intents在激活组件的时候就必须得提供该组件的名称、意图、意图过滤器和系统核心之间构成的关系如图2.3所示:

 

从图2.3能够总结出它们的基本工做原理,应用将Intent传递给系统核心层,系统核心层接着经过Manifest文件或者代码的方式获取到意图过滤器,从意图过滤器里读取到能够响应的意思并进行下一步的操做。

Intent传递实现

一个应用每每拥有多个界面,各个界面每每经过Intent来交流,在上面的章节中咱们己经了解到了经过Intent的putExtra()方法等能够在不一样的活动界面(Activity)之间进行传参等沟通交流。这里将介绍Intent之间的传递原理。Intent的传递原理及传递过程如图2.4所示:

 

由上图2.4可知,Intent流程是首先调用Context类的StartActivity方法来建立意图对象,接下来系统自动执行Instrumentation类的execStartActivity方法。Instrumentation类的做用是调节整个应用当中的全部活动界面(Activity ),充当应用程序的管理员的角色,其execStartActivity方法的做用是根据上面执行StartActivity方法后传递过来的Intent来启动相应的活动界面,并且Instrumentation对象能够经过RPC方式把调用context StartActivity传递给ActivityManagerService}

系统核心层是在虚拟机上运行的,与通常的Service不一样的是,系统核心层是在底层服务,是不可见的。其主要做用就是对Android的某些关键事务提供和服务。ActivityManagerService进行Activity调度过程以下:因为PackageManagerService服务有整个应用以及应用的各个组建的所有信息,Intent经过PackageManagerService传递而后和当前Intent  Filters匹配,若是匹配成功则可以获得与Component有关的信息,将这些信息传给ActivityManagerService后即可启动Activity,完成Intent传递

尽管启动Activity比较复杂,过程当中会调用不少服务,显得代价比较大,可是这些调用并不会在循环中重复出现,与其对应用效果的提升相比,这些处理仍是利远远大于弊的。

2.2.4进程和线程

 

Android为动态形式。应用程序启动后,其中的各个组件相互调用,全部的数据也都变为了更加方便地了解应用启动后的动态过程,引入了进程与线程。进程用Activity,  Service, ContentProvider和BroadcastReceiver组件在系统最底层构建了运行环境,正常状况下同一个应用的全部组件在一个进程内运行,同时,开发者也能够自行配置。用户安装新的Android程序时会获得一个用户ID,而且不一样的Android程序能够共享相同的用户id,这样就可互相访问程序之间的信息,能够共享JVM而且在同一个进程中运行。正常状况下,一个Android应用的全部组件都是由一个进程的主线程管理的。新线程是在有某些复杂耗时间且须要等待的任务须要执行时建立的,多线程操做可让系统在等待查询数据库等操做时执行其它操做来保证应用的性能。

2.3安卓APP界面组成

界面是用户与程序间交互的媒介,界面与客户体验有着直接的联系。若是开发者将总体布局设计与界面资源相结合,并结合接口设计等功能,就能够设计出友好简洁的界面。界面控件树型结构如图2._5所示:

 

由上图可知,图的顶端是View Group,是一个总控件,其能够衍生出View Group以及View,衍生出来的为子控件,父控件管理子控件的位置、面积,而且为其分配任务。树形界面控件具备结构层次、控制方式简单明了等优势。在程序开发的过程当中,开发者会加入不少源代码之外的文件,并且可以支持多种类型的资源文件,例如图像,音频等,Android可以支持多种类型的文件。因为这些优点,树形界面控件现在被普遍应用。但其有着传播时间较长等自身的不足,使得操做的效率变低[m。可是与优势相比,这些缺点仍是值得的。

2.4本章小结

本章对涉及到的安卓基础知识进行了剖析,包括了安卓系统中的重点技术、使用场景特色以及重点构架和模块。介绍了安卓的工做原理以及开发中须要用到的相关技术进行了详细讲解,为后面章节的具体设计与实现做了基础铺垫。

 

第3章移动客户端软件系统的需求分析

3.1移动客户端软件的做用

网络的使用对人们来讲己经很是广泛,因为手机终端具备方便的可携带性,使得移动网络具有了Pc网络所没有的天生优点,深受广大人们喜好。如今智能手机全面普及,移动互联网时代己经到来,每人一部智能手机己经再也不是空话,面对如此庞大的用户群,移动客户端软件的开发显得尤其重要。

Android是第一个能够称为真正开放和完整的为移动终端设计的移动软件平台。做为移动客户端,与服务器端接口交互通讯是很是重要的一个方面。咱们如此迅速的跨入移动互联网时代与Android系统的迅速普及密不可分。移动互联网时代开发出的移动应用有两种模式:第一种是本地应用,这类应用安装在手机上,可能须要联网操做,但不须要开发配套的服务器接口,例如一些游戏等等;另外一种是网络客户端,这类应用不只仅须要开发本地的应用,还要设计配套的服务器端接口,而且这类应用每每须要联网服务,在这种模式中,开发人员既要掌握像Android这样的移动开发技术还要掌握开发服务器端API方面的技术,本文所设计实现的移动客户端系统就属于这种模式。使用移动客户端能够完成一些电脑上没法完成的功能,好比摇一摇功能、随时随地拍照上传功能等等。而且移动客户端的使用环境普遍,无论是在公交车中站立仍是在餐厅等餐,均可方便的使用。移动客户端的优势和做用还有不少,在此不一一列举。 随着手机的硬件配置的不断发展,如今主流手机的硬件配置包括存储空间和运算能力甚至能够媲美通常PC机,所以客户端软件所受到的限制就愈来愈少了。目前各式各样的手机软件早己铺满了手机界面,开发者开发出的客户端应用的内容和功能更加丰富,界面更加人性化,性能更加完善,大大的丰富了移动设备的功能,也使用户享受到了更加温馨的服务。

3.2移动客户端开发现有流程分析

从软件工程的角度来讲,客户端的开发整体上包括项目需求分析,项目设计,项目审核,项目开发,项目测试这几个方面,下图展现了移动客户端开发的所有流程:

 

此设计的目标是开发一款符合学校正制需求的移动客户端系统,客户端的网络需求能够由中国移动运营商或者WIFI提供网络支持。

软件运行环境说明:

手机端:选用Android系统的手机或者平板电脑,要求Android2.0以上操做系统,硬件须要摄像头,其它硬件保持正常,可以链接到互联网。

服务器端:选用Windows7操做系统,保证必定的存储空间,安装有MySQL,JAVA和Tomcat等运行环境,可以正常访问互联网。

(1)     软件特征:本软件面向的是使用Android系统手机或平板电脑而且可以正常访问互联网的特定用户人群。

(2)     假定和约束:本客户端的开发工做是基于假定手机端和服务器端硬件无缺,系统运行正常,并具备必定存储空间。

3.3本移动客户端软件系统的需求

    通过学校人员和开发人员仔细协商后,本客户端的用户人群定为学校内部员工以及学校的客户。学校员工及学校客户须要注册登陆才能使用,按照学校要求,每一个员工及学校的产品等都绑定一个惟一的二维码,经过扫描能够看到他们的信息,员工和客户应该可以随时随地发表状态或拍照上传并分享,而且其余人能够评论此状态以方便员工之间、客户之间或者员工和客户之间能进行沟通,学校员工可以发布通知或公告以便最新消息的扩散,定位及导航功能使得客户可以方便的找到学校所在地,拨打电话功能使得客户能直接和学校值班客服进行电话沟通。综上,本移动客户端的需求定为以下几个方面:

(1)     须要有登陆注册模块;

(2)     须要有二维码条形码扫描识别模块;

(3)     须要有相似微信朋友圈那样的能够分享状态和照片及评论的模块;

(4)     须要有发布通知公告的模块;

(5)     定位及导航模块;

(6)     拨打电话模块。

3.4本移动客户端开发步骤

(1) 跟学校人员协商进行需求分析;

(2) 肯定开发工具和服务器端开发环境;

(3) 肯定客户端和服务器端接口编写的规范;

(4) 客户端软件界面设计;

(5) 服务器端数据库和接口的编写;

(6) 客户端和服务器端链接测试;

(7) 客户端各个模块的编写;

(8) 软件测试;

(9) 与学校交接。

3.5用户使用流程

用户使用应用程序的流程以下图所示:未注册的用户首先经过注册,而后登陆应用,对于己经注册的用户,则直接登陆便可使用。

 

3.6本章小结

本章介绍了本课题的需求分析,说明了客户端系统的做用,并分析了现有的客户端开发的流程,而后根据本课题的具体需求,制定了本客户端的开发流程,并把需求的各个功能划分红了更加直观的模块。

第4章移动客户端软件系统的设计与实现

4.1基于安卓客户端系统的整体设计

4.1.1安卓APP设计的原则

安卓系统应用是由不一样组件结合起来的,组件内部高内聚,组件之间的关系是低祸合的,并且软件的划分边界不清晰。在其它软件开发过程当中,程序内部都有本身方法来分解功能,这些方法并无统一的标准。软件之间的通讯也没有统一的标准,须要交互时候必需要获得双方的各项信息才能够。而在安卓系统中,底层核心能够为全部的应用程序进行信息存储,识别,通信,起到了为组件搭桥牵线的做用,这样组件之间交互就没必要获得对方的具体信息,没有底层核心,它们之间是不能进行交互的。具体状况以下图所示。

 

因为安卓应用程序具备上述特色,本客户端的设计原则以下:

(1)     对于应用的层次要严加思考,层次要划分清楚,组件之间低祸合;

(2)     明确各个组件的功能,分工清晰以便组件的复用与扩展;

(3)     对于进程与进程的消息传递,线程与线程的通信要合理设计;

(4)     应用界面要友好,用户使用方便,易于上手。

(5)     在考虑应用的设计时,应该从软件平台考虑,衡量其它应用以及HomeScreen的要求。例如可以使其它软件使用的服务应提供相应的接口。

(6)     软件应考虑到被打断等特殊状况,例如,在运行过程当中有其它应用的通知、接到电话,短信等,所以应作监听功能。

4.1.2客户端软件的宏观架构方案

客户端软件除了安装在安卓终端,包括平板电脑以及智能手机上的移动客户软件以外,还有数据库以及服务器端系统。移动客户端与数据库之间经过服务器相互相互,移动客户端经过网络链接到服务器,支持无线网络和移动网络。服务器与对应的数据库相连,起到桥梁做用。具体关系以下图所示:

 

4.1.3客户端软件的功能模块设计

根据上一章中需求分析后,咱们把客户端软件分红几个模块,模块的详细设计以下图所示:

 

 

4.2移动客户端软件详细设计

4.2.1客户端软件开发的环境搭建

基于安卓客户端开发工具主要是Eclipse,开发环境由JAVA系统环境和Android SDK环境组成。开发环境的搭建过程以下:

(1)     配置JAVA运行环境。下载安装JDK。官网网站是:  http://www.Java.com/en/download/chrome.jsp?locale=en,下载界面以下

下载安装完成后仍须要配置开发用的计算机的环境变量来进行JAVA开发。

配置环境变量主要包括三个方面:JAVA的安装地址(Home变量),JAVA的可 运行程序的地址以及JAVA的类地址变量(CLASSPATH )用鼠标右击“计算机”,选择“属性”,而后选择“高级”,再选择“环境变量”,再选择“系统变量”,最后选择“新建”。

 

在新建窗口中的“变量名”处填写“Java_ home",“变量值”填写JAVA的安装主目录路径,例如本机为:"C:\Program FilesUava\jdk1.6.0",最后点击“肯定”,这样JAVA的HOME变量(Java_ home)就设置完成了。

 

  

下面简单介绍一下“classp ath”变量的配置。选中“系统变量”添加或编辑"classpath”变量,变量名咱们设置为“CLASSPATH",而后在“变量值,,中填写JAVA的lib库所处的地址,例如本机是:"C:\Program FilesUava\jdk1.6.0\jre\lib",以下图所示。

 

 

如今能够进行“path”变量的配置了。与上面“classp ath”变量设置时类似,“变量名”输入框中填写在的地址,例如本机是:"path"“变量值”输入框中填写JAVA可运行程序所“C:\Program FilesUava\jdk1.6.0\bin”。

 

  

 JDK的环境变量己经配置完成,须要判断环境变量的配置成功与否,在其C cmd)窗口中输入:+.lava -version”来输出JAVA安装版本,若是正确输出安装版本信息,例如显示以下图信息,说明JDK己经安装并配置成功。

 

第二步,安装Android运行环境。在Android Developers下载Windows下的安卓SDK压缩包,并用上面配置JDK一样的办法把安卓SDK中TOOLS的路径添加到”path“变量中。使用在CMD终端中输入“Android -h”来检测AndroidSDK安装成功与否。

第三步,配置eclipse以使用它进行Android开发。打开Eclipse配置接口,进入Add New software界面,而后输入ADT下载源,如图:

 

肯定返完成以后,还须要把Android SDK的路径配置好,如图

 

4.2.2对应服务器端的运行环境搭建

本项目开发服务器端使用的是经典的Tomcat+MySQL,开发工具是Eclipse,服务器端使用的语言是JAVA,主要的环境搭建工做就是下载Tomcat,MySQL, JAVA,Eclipse并在服务器电脑上进行安装并配置环境变量,这些环境变量的配置过程与方式与上一节相似,在此再也不赘述。

4.2.3客户端软件的用户界面设计

首先是软件小图标的设计,也就是安装在手机上后在手机桌面上显示的那个图标,这个图标要考虑到两方面,一是要体现此客户端的主体风格,二是也能够体现出学校的元素。而后是软件自己的界面设计,安卓的界面采用的是Xml,经过xml中的样式总局,咱们能够设计出各类用户界面,和学校美工人员协商后肯定的客户端主界面以下图所示。

微圈登录界面:

 

微圈注册界面:

微圈主界面:

 

 

 

微圈数据库后台:

 

数据库后台 1

 

数据库后台2

 

4.2.4客户端软件的实现类设计

当用户打开客户端软件直接跳到登陆界面,在用户输入用户名和密码并点击登陆按钮后,客户端会把当前输入的用户名和密码上传到服务器,服务器查询数据库以验证用户的合法性,若是用户名和密码皆正确则进入软件主界面,不然提示登陆失败并引导用户进行注册。 用户进入主界面后,能够选择任意的功能进行操做,如发表状态、评论等。

根据软件客户端的业务逻辑,设计出的实现类以下图所示:

 

本客户端系统主要包括这几个重要的类:

(1)     HomeActivityjavaIndexActivityjava

(2)     FriendActivityjava

(3)     Message.java

(4)     comment.java

(5)     Photo.java

(6)     PersonalActivityjava

(7)     ZhihuiActivityjava

(8)     Communicate.java

(9)     Navi.javao

类HomeActivity.j ava实现了对安卓Activity类的继承,主要显示用户登陆成

功后的界面,展示三个菜单以让用户进行点击选择,这三个菜单分别是:主页,微圈和我的中心。类IndexActivityjava主要实现了首页要显示的功能,主要显示了学校logo,以及扫一扫功能,沟通智慧之窗功能等。类FriendActivityj ava主要实现了朋友圈功能,包括上拉刷新功能,下拉加载更多功能,它包括三个子类:Message.java} comment.java和Photo.j ava,这三个类分别实现的功能是发表状态,发表评论和拍照并上传照片功能。类ZhihuiActivity.java主要实现了发表通知公告、定位导航等功能,它包括了两个子类:Communicate.java和Navi.java,分别完成了发表通知公告等功能和定位导航功能。把各个功能划分红具体的功能模块类,有助于系统的维护和功能的扩展。

4.2.5客户端软件的数据关系设计

根据学校人员提出的具体软件需求,咱们设计出了系统的数据关系,数据库咱们选用的是开源的MySQL。数据库保存在服务器端。用户表user,以下表所示:表4. 1用户表

 

字段

类型

默认值

是否主键

是否自增

说明

Id

int    

Not NULL

是    

是   

索引ID

name

varchar

Not NULL

Password

varchar

NULL

密码

Sex

varchar

NULL

性别  

Phone

varchar

NULL

电话  

Email

varchar

NULL

邮箱 

Address

varchar

NULL

住址 

 

朋友圈发表的状态表xinjiaoliu,以下表所示:表4. 2状态表

字段

类型

默认值

是否主键

是否自增

说明

id

int

Not NULL

索引ID

time

date

NULL

发表时间

des

varchar

NULL

发表内容

pic_path

varchar

NULL

图片路径

 

朋友圈发表的评论表reply,以下表所示:  表4. 3评论表

字段

类型

默认值

是否主键

是否自增

说明

id

int

Not NULL

索引ID

srcid

int

Not NULL

外键,对应回复的状态的ID

content

varchar

NULL

评论内容

time

date

NULL

评论时间

uservarchar

NULL

发表评论的用户  

 

字段

类型

默认值

是否主键

是否自增

说明

 

4.3客户端软件主要功能实现

在Android开发过程当中,安卓的类包表示为Android.*形式,例如包含一些问网络的类和接口的类包表示为Android.net,其中一些比较关键的类包主要有:高层程序模型与安卓应用基本运行环境的提供者(app包);主要实现访问或发布设备上所包含的各类数据类包(content包);操做数据库的类包(database包);图形绘制与操做类包(graphics包);定位和相关服务的类(location包);执行对多媒体操做和管理的一些接口的类包(media包);包含一些访问网络的类和接口的类包(net包);提供系统最底层的一些基本服务操做类包(os包);OpenGL工具包(opengl包);基础的UI框架类包(view包);完成对Android各类数据内容的访问的类包(provider包);与电话功能相关的服务的类包(telephony包);安卓系统基本功能类包,例如访问或者更改系统时间等(util包);操做手机自带浏览器操做的接口的类包(webkit包);显示在应用程序中的各类用户界面的基本元素的类包(widget包)。 Android有一个很是核心的特性,应用程序能够利用其它应用程序的元素.也就是说应用能够很是简单地直接调用其它应用的代码或模块。例如,若是应用程序须要拨打电话的功能模块,可是咱们不须要从新开发一个拨打电话模块,只须要找到己经开发好而且开源的功能模块而后直接使用它就能够了,开发人员能够直接调用该己经开发好了的模块,大大节省了开发的人力和物力,而且缩短了开发周期。安卓应用程序在运行的时候须要系统来调用或者初始化一些主要组件。这些主要的组件己经在第二章中的第二节进行了详细的介绍。

4.3.1登陆注册模块的实现

当用户打开软件时会首先进入登陆界面,用户能够使用己存在的用户名密码进行登陆,若是是第一次使用则须要进入注册页面去注册新的用户。登陆流程图以下图所示:

登陆界面以下图      

 

须要注意的是由于是自动进入登陆界面的,因此在进入登陆界面以前的那个启动界面SplashActivity中要先打开主页Activity,也就是HomeActivity,而后在登陆界面LoginActivity中执行完和服务器的交互后,把登陆是否合法的结果再传回HomeActivity。从一个界面进入另外一个界面的代码以下:

Intent   mIntent=new Intent(SplashActivity.this, LoginActivity.class);

    startActivity(mIntent);

在登陆界面中咱们使用多线程机制与服务器端进行交互,登陆的时候为了避免阻塞主线程(UI线程),须要把些耗时并阻塞主线程的操做放在另外一个线程中处理,所以登陆采用异步处理是不可避免的。咱们使用了AsyncTask来进行异步处理,它是android提供的轻量级的异步类,咱们在开发的时候定义一个直接继承AsyncTask的类,而后把全部须要异步处理的操做放在这个类实现,这个类能够经过AsyncTask类自带的接口把当时执行的任务的反馈给主线程,以便通知主线程进行相关的操做。它的优势是简单轻量、使用快捷,而且过程可控。如下这两个方法是最重要的,也是不可缺乏的:

(1)      doInBackground(par...)。运行于后台的此方法,也就是在非主线程执行,在这里主要完成一些和服务器交互、图像处理等比较耗时的操做,处理完成后把结果返回。在这里不容许直接更改主线程(UI线程)的界面元素,不然会抛出异常。只能经过自带的Progress()等方法通知主线程进行UI的更新。

(2)      onPostExecute(Result)。该方法通常须要传入参数“Result",这个参数就是上面doInBackground(Par})方法中返回的结果。在这里主要进行耗时操做后获得的结果的处理。此方法在主线程执行,所以是不能在这里执行费时操做,不然会阻塞主线程,出现卡顿现象。下面三个方法是能够选择性使用,使不使用取决于你想要实现什么样的功能:

(3)     onProgressUpdate(Progressw)。当在doInBackground(Par})方法中须要与主线程界面交互,例如显示当前任务执行进度时,进度状况的显示就是在这个方法中实现的,此方法由于要操做主界面,因此运行在主线程

(4)     onPreExecute()。此方法是在doInBackground()方法开始以前自动调用的,也就是在所须要完成的任务执行以前调用的,能够在这里完成一些准备操做,例如进度条初始状态的设置等等。

(5)     onCancelled()。当用户执行取消操做时系统自动转到这个函数中执行接下来的代码。

在咱们使用AsyncTask类进行异步处理的时候,有些规范是必需要注意的。AsyncTask类的对象必须在主线程中建立使用,而后再调用execute方法来进入到异步处理操做,且该方法也必须在主线程中进行调用使用,除了该方法外,AsyncTask类的其它方法不能够手动调用,例如咱们在任何状况下都不能够直接调用onPostExecute(Result)方法来执行结果处理操做。在本客户端中,与服务器进行交互的时候咱们都使用了AsyncTask进行异步处理,下面咱们以登陆为例,核心代码以下所示:

 

//登陆系统

      class MyTask extends AsyncTask<String, String, JSONObject>

      {

          @Override

        protected void onPreExecute(){

            // TODO Auto-generated method stub

            super.onPreExecute();

                @Override

            protected JSONObject   doInBackground(String... params)

            {

                  Map<String, String>   map2=new HashMap<String, String>();

                  map2.put("name_   c", params[0]);

                    map2.put("password", params[1]);

                    try{

                        retStr=new   JSONObject(NetTools.sendPostRequest(url,

map2, "utf-8"));

                    }catch (Exception e){

                        e.printStackTrace();

                    }

                  return retStr;

          @Override

          protected void onPostExecute(JSONObject result)

          {

            try

              JSONArray   rs=result.getJSONArray("result");

              String   code=result.getString("code");

              if(code.equals("1”))

                {

//代表登陆成功,进行登陆后操做

else

                {

//代表登陆失败,进行登陆失败后的操做

DisplayToast(”登陆失败!”

      }

}catch(JSONException e)

e.printStackTrace();

 

当咱们使用以下代码时,上面的代码被调用,并在后台进行,不阻塞UI主进程。

   

MyTask   login=new MyTask();

    login.execute(username,password);

 

   

上面的代码把用户名(username)和密码(password)做为参数传入,这两个能在方法protected JSONObject doInBackground(String... params)中获得,如params [0]就是咱们传入的username,  params[1]是咱们传入的password o在方法doInBackground()中进行与服务器端的交互,具体发送和接收数据在类NetTools中的方法sendPostRequest()中实现,该方法的关键代码以下所示:

 

在本客户端中,咱们使用Post方式向服务器传送数据,包括文字(英文,中文等)、文件等,并且数据对用户不可见。服务器端接口一直监听请求,若监听到数据传输请求则进行接收数据等操做,详细代码解释会在下面的章节进行介绍。对应的服务器端的登陆流程以下:

 

使用了异步处理不会阻塞主UI线程,使得应用能够显示人性化的提示信息,不会出现卡住界面的状况,以下图表示正在登陆:

 

注册功能与登陆功能的流程十分类似,不一样之处在于:注册上传的参数比较多,不仅包括用户名和密码,还包括用户的其它一些信息,如邮箱、联系电话、住址等,并且服务器端也有一些不一样,登陆是查询以验证合法性,而注册是把

客户端上传的信息插入到数据库中,因为上面己经讲述了登陆的过程,注册的

相关技术细节这里再也不进行陈述。

登陆时还有一个记住密码功能,完成该功能使用的是SharedPreferences类,

SharedPreferences是Android中最方便快捷而且容易使用的数据存储技术,实际

上SharedPreferences处理的就是一个key-value(键值对)。SharedPreferences常

用来存储一些轻量级的数据。使用如下代码保存数据:

 

 当下次登陆时要检查是否己经成功登陆过,若是有保存了的用户名和密码则把它们取出来并自动填写到输入框中,使用如下代码取出己保存的数据,这样就简单的完成了记住用户名和密码的功能:

 

4.3.2朋友圈模块的设计与实现

朋友圈功能主要是为了方便沟通与交流,要求能发表状态,针对某个状态能够回复评论,还要求能发表图片状态。朋友圈的结构以下图所示:

 

朋友圈的主体界面以下图所示

 

 

发表状态时能够直接在界面的上部分输入并点击发布,一样咱们仍然使用AsyncTask进行异步处理,首先判断用户的输入是否为空,若是为空提示用户容不能为空,若是不为空就开始异步与服务器交互,把用户发表的状态、当前时间、用户名保存到数据库中,保存成功后告知客户端进行一次刷新。针对某个状态发表评论时,客户端首先要获得这条状态的ID以便和状态关联起来,而后用户输入评论后把这条状态的ID,评论内容,当前时间和用户名用一样的方法发送到服务器,在服务器端把这些数据插入到数据库中,而后把成功与否的结果返回给客户端。在上图中,图片都是以缩略图的形式保存的,这样提升了加载速度也减小了图片占用的空间,当咱们点击图片时,图片会放大成原来尺寸方便用户的观看,使用的方法很简单,由于咱们己经获得了图片的路径,在监测到点击图片事件吧,把这个图片对应的路径地址传给要显示大图片的Activity,使用mIntent.putExtra("pic_path", pic_path);在这个Activity根据路径正常显示便可。发表图片状态的时,要首先打开手机自带的相机,打开相机的代码以下:

    

拍照完成后显示该照片,而且容许用户输入状态,界面以下图所示,点击发布后客户端把图片和状态发送到服务器,在服务器端成功接收到图片后,根据当时时间建立一个惟一的图片名,并生成该图片的保存路径,而后把图片的保存路径和状态都插入到数据库表中。最后把处理结果发送回客户端,若是发布功能客户端自动刷新一次。

 

4.3.3客服公告的设计与实现

此模块是设计给用户直接用客户端向学校客服人员提问问题的。这部分包括提问问题与全部问题的显示两部分,同时在设计上也加入了下拉刷新与上拉加载更多。包括提问的问题内容和提问时间。提问界面以下图所示。

 

 

这模块的实现方法跟上一节中的朋友圈中的发表状态的实现技术和方法都差很少。主要也是用户填写要求的内容后进行异步处理与服务器端交互,把数据发送到服务器端,在服务器端把这些数据插入到数据库中,成功插入后通知客户端进行刷新操做。上拉松手刷新是必须,由于用户随时随地都有可能在发表状态,咱们须要一个方便的快速刷新的机制,上拉而后松手进行刷新无疑是解决这个问题的最佳方案,下拉加载更多一样也是不可或缺的,由于用户发表的状态的数量一直在不停增长,若是每次进入都一次性的把全部的状态所有加载出来就一个不可想象的事情。为了一次性解决上面的问题,咱们设计了一个上拉刷新,下拉加载更多的控件,控件的原理图以下所示:

 

 

手机屏幕的大小和上图中的Container View的大小同样,而Heade:和Footer能够想象成是超出屏幕上下边界的部分,经过设置Header和Footer的padding属性来使Header和Footer两个部分强制超出屏幕外,例如设置Header的padding=-_50,那么它就会处于屏幕最顶端的上部,且距离顶端_50个单位,所以日常不拉动的时候是不可见的。当手机监听到下拉动做时,系统会自动调用相应的方法来移动布局,也就是使整个布局向下滑动,Header也会下滑,由于它是超出屏幕外的,这样它就会显示到屏幕上,上拉正好与下拉相反。由于下拉刷新上拉加载更多的功能在多个模块中都要使用,咱们把它抽象成一个接口以便后面的扩展和修改。以下所示这个接口包含的全部方法:

 

 

接下来咱们还须要定义一个实现了上述IPu11ToRefresh接口的基类:Pu11ToRefreshBase。它继承自LinearLayout类,若是你想实现一些自定义的功能,例以下拉刷新功能,只须要建立一个继承这个基类的新类,而后在这个新类中把一些方法根据本身的须要进行从新实现就能够了。这个类主要实现如下内容:

(1)     处理。nInterceptTouchEvent()和onTouchEvent()中的事件:好比有下拉操做时,当内容的View(好比ListView)正处于屏幕最顶部,此时咱们必须截断这个Touch事件,而后使用move事件就会把后续的事件传递给onTouchEvent()方法中,而后再在这个方法中,咱们根据手指滑动的距离再总体移动整个视图View)。

(2)     负责建立Header,   Foote:和Content View:在构造方法中调用方法去建立这三个部分的View,派生类能够重写这些方法,以提供不一样式样的Header和Footer,咱们使用createHeaderLoadingLayout C)方法来建立“头视图”C Headerlayout),使用createFooterLoadingLayout C)方法来建立“脚视图”C Footer layout)

(3)     设置各类状态:实现这样的下拉刷新功能须要监听到各类状态,例如:下拉、上拉、松手、是否正在加载等等。状态会随着用户的操做进行改变,例如用户手拉动的距离超过必定的值时,状态会从松手不完成任何操做转制到松手进行刷新状态。而后“头视图”或者“脚视图”会根据当前的状态来显示当前的应该显示的界面。

 

onInterceptTouchEvent()和onTouchEvent()这两个方法是必需要进行重写的,由于它们能完成很重要的功能,例如完成上下滑动等事件处理等功能。上拉刷新的主要思路就是在检测到向下拖动到必定距离并松手后客户端向服务器端发送更新内容请求,服务器接收到请求后查询一下数据库,并把最新的数据发送回客户端。下拉加载更多的思路是设置一个限制数,好比说是巧,那么第一次进入的时候服务器只传递巧条数据给客户端,下拉一次后服务器再传递另巧条数据给客户端,而且下加载的过程的为了美观还得在最下面,也就上述的Footer显示“正在加载,请稍候”相似这样的提示语,所以它也须要异步处理,也就是须要用到上面己经提到的AsyncTask在实现的过程须要用到适配器BaseAdapter,这个适配器的做用就是把每一项动态的逐一的放到一个ListView中,这个ListView必须是咱们自定义的一个ListView,它须要继承上面提到的Pu11ToRefreshBase类,由于咱们要实现上拉刷新等功能,假设咱们把这个自定义的ListView命名为MyListView。那么在使用时须要在layout的界面xml中使用以下语句声明使用的是咱们自定义的控件

 

而后在界面类中使用setAdapter()方法把这个ListView和咱们自定义的适配器adapter绑定,用户所发的每一条信息就能够当作是一个ListView的item项,这个item也使用一个独立的界面xml来表示,重点就是在适配器中把这些item项动态的加入到ListView中,在咱们自定义的适配器中使用LayoutInflater类的inflate方法就能够获得item的xml,并使用这个xml的元素,假设这个item的xml的名字是activity_nongguanlist item.xml,这个xml包含四个元素:标题(title用户名(name ),时间(time ),状态(state ),在适配器的getView方法中使用以下代码就能够动态的绑定item到LIstView中。

convertView=mInflater.inflate(R.layout.activity_list item, null);

String title= (ImageView)convertView.findViewById(R.id.item_title);

String  name= (TextView)convertView.findViewById(R.id.item_name);

String  time=(TextView)convertView.findViewById(R.id.item_ time);

String  state=(TextView)convertView.findViewById(R.id.item_states);

上拉刷新如图所示:

 

4.3.4定位导航模块的设计与实现

定位导航的实现借助的是百度地图的Android导航SDK,这个SDK是免费的,而且接口能够无次数限制的使用。首先要先申请密钥和下载相关SDK包和一些库等,具体使用和配置开发过程能够参考百度导航SDK官方网站的说明和

教程:http://developer.baidu.com/map/index.php?title=android-navsdk o

4.3.5扫一扫模块的设计与实现

扫一扫在各个手机客户端中都常看到。本客户端二维码扫描使用的是目前十分流行的开源项目(Zxing项目,由Google主导),整个项目工程及相关例子的下载地址是:http://code.google.com/p/zxing/。二维的扫描矩形四个角是用Canvas类的drawRect方法画的,drawRect的原型是drawRect(float left, float top, float,right, float bottom, Paint paint)。扫描矩形框中上下扫描的扫描线也是一样的办法画的,不过参数坐标需在设定的频率内不刷新,就实现了线上下位移的效果了。二维码扫描界面以下图所示:

 

咱们实现了自动打开相机自动聚焦进行扫描二维码,扫到二维码后解码获得此二维码表示的内容。二维码大致上有如下特色:

  1. 二维码编码密度高,所以信息容量大,例如能够容纳多达可容纳多达100多个汉字。
  2. 容错能力强,而且纠错能力很是高,二维码图片损毁面积达_50%仍可成功解码出其所承载的信息。
  3. 解码成功率高,实验数据显示解码失败率不超过千万分之一。
  4. 保密性与防伪性好。
  5. 成本低,易生成和保存。

二维码能存储汉字、数字和图片等一维码所不能承载信息,所以它能够应用在更广大的领域。由于二维码扫描功能须要调用手机自带的相机,在AndroidManifest.xml中要声明上使用camera权限,

在AndroidManifest.xml文件中加上代码:

<uses-permission android:name="android.permission.CAMERA" />

就声明了权限。扫描流程以下图:

 

4.3.6拨打电话模块的实现

在安卓应用中实现拨打电话的功能是很容易,在应用中指定好电话号码,而后经过代码调用手机自带的拨号功能,把号码传递过去,就实现了自动拨号功能,自动拨号在一些团购网站等服务性网站客户端中比较经常使用,它的做用就是最大程度方便用户的使用,使得用户不用先记住客服电话,而后手动打开拨号应用并输入己记忆的电话号码进行拨打。使用以下代码能够自动拨打指定电话号码,假设咱们的目标电话号码是100860

//传入服务,parse()解析号码

Intent   intent=new Intent(Intent.ACTION_ CALL, Uri.parse("tel:”+“10086”);

//通知activtity处理传入的call服务,开始拨号startActivity(intent);

 

最后咱们介绍了安卓软件中很是经常使用的功能:连续点击再次退出应用程序。这里包括两个部分,一个退出应用程序的方案,二是连续点击退出。退出应用程序最简单是使用finish()方法关闭本Activity,可是针对多个界面的应用来讲这样会带来一些问题,须要咱们在具体实现的时候时时刻刻记得最后保证每一个Activity都得关闭,这些作开发起来会增长必定的劳动和时间成本的,咱们采用的方案是经过广播事件去一次性关闭全部的Activity,首先就是创建一个父类,让全部的activity继承这个父类,这样就不用每一个Activity都去注册以接收广播,只要在父类注册接受就好了。在父类的Resume()中使用方法registerReceiver()注册广播,当接收到请求时,在父类的新建的类roadcastReceiver()中执行方法finish(),这样全部的Activity就都关闭了,由于全部的Activity都继承自这个父类Activity。而后在全部子Activity中监听返回按键,当在设定的时间内连续两次点击时就发布广播。连续双击退出应用程序的流程图以下所示:

 

4.4与客户端配套的服务器端的设计与实现

无论是登陆注册,仍是发表评论都须要服务器端接收客户端发送的数据并进行处理,执行数据库操做也是在服务器端进行的。每个客户端的功能都对应一个服务器端的一个JAVA类文件。且这些类名须要在web.xml中进行类名和类位置的映射,例如登陆类名为:Login,在包login里,须要以下映射:

<servlet>

              <servlet-name>Login</servlet-name>

              <servlet-class>login.Login</servlet-class>

          </servlet>

        <servlet-mapping>

              <servlet-name>Login</servlet-name>

            <url-pattern>/Login</url-pattern>

        </servlet-mapping>

 

 

这样在客户端当指定访问地址时只须要指定服务器IP地址加端口加工程名加类名就能够了,例如:http://192.168.1.102:8080/appserver/Login,服务器接到请求后会调用login包下Login类进行操做。这些服务器端的类都继承类HttpServlet,例如当咱们接收Post方法传来的数据时使用以下代码能够获得客户端传递过来的数据:

public class   Login extends HttpServlet{

        pubfic void doPost(HttpServletRequest   request, HttpServletResponse resp

onse) throws   ServletException, IOException{

        String name_ c=new String(   request.getParameter("name_ c").getBytes("i

so-8859-1   "), "UTF-8");//获得用户名

        String password=new   String(request.getParameter("password").getBytes

("iso-8859-1"),   "UTF-8");//获得客户端发送过来的密码

    //接着执行其余一些操做,例如数据操做等等

    }}

 

往客户端发送数据的时候要先PrintWriter out=response.getWriter();能够使用out的方法print()和flush()把数据写入并发送到客户端。各个服务器模块的思路和代码实现和上面的登陆模块都大同小异,区别就在于接收的数据内容、数量不一样,执行数据库的操做不一样,例若有的是查询,有的插入等等,所以咱们再也不逐一介绍各个模块的代码实现。

4.5本章小结

本章详细说明了安卓移动客户端软件的设计与实现。设计出了整个系统的整体实现方案和软件的整体构架方案。介绍了移动客户端软件的界面设计、各个模块的实现细节、数据库的设计方案、服务器端的设计与实现细节。重点实现了安卓四个大类的中各个Activity的实现、安卓的监听机制,以及客户端与服务器端交互过程的实现。

第5章移动客户端软件测试

5.1测试环境与配置

在软件开发中通常测试分两种:白盒测试和黑盒测试。

黑盒测试是针对移动客户端软件系统的测试方式,要从用户的角度出发,检验应用是否功能正常,检验应用是否偏离应用的需求。

白盒测试跟黑盒测试不一样,它针对的是软件系统的代码,检验程序的逻辑等是否有误

在开发的末期,咱们己经进行了白盒测试,本身感受没有问题后找了几个未参与开发的同窗们从用户的角度测试网站,也就是咱们进行了黑盒测试,下面咱们重点介绍一下黑盒测试。

移动客户端软件是基于Android系统开发的应用软件,咱们使用安装好APK的真机来测试的,系统的服务器端使用实验室的PC。测试的目的是总结开发及测试阶段的过程,检测移动客户端可否在服务器端正常的状况下正常工做,同时检测移动客户端软件系统的性能。服务器端电脑的操做系统是Windows?,中兴、华为、三星等安卓系统手机做为测试时使用的手机终端。服务器端电脑的配置为:Intel CPU双核3.39GHz、3.4GHz;内存:3.00G;硬盘容量:3206 0

5.2测试需求功能

功能与性能方面测试是咱们主要测试工做,对移动客户端在手机上进行了实际使用测试。预期测试功能以下表所示:

 

5.3测试流程的设计

首先肯定软件相关系统配置正确,而后安装移动客户端。本次测试包含单机测试和多机同时测试,启动移动客户端软件后随机使用客户端的任何功能,测试过程当中随时记录测试的结果或者出现的问题与BUG。

5.4系统测试的结果

最后总结一下测试结果,测试代表,客户端界面设计大方美观,符合用户使用习惯,登陆等各个模块在硬件网络正常的状况下能够正常工做,性能优秀,除了网络速度的影响,应用软件不会产生延迟的状况,整体上功能体验是流畅的。登陆注册能够成功工做,重复名不可能注册,朋友圈能够发布状态、回复状态、发表图片等等,总的来讲,移动客户端软件的整个系统经过了测试,包括客户端软件和服务器端功能。本次移动客户端软件的开发是成功的。固然测试过程也出现了一些小问题,例如由于各个手机的屏幕大小、分辨率不一样的缘由致使软件界面的不统一等问题,还有一些功能上的问题,例如,下拉刷新时出现了重复项等,都一一进行了解决。客户端各个功能模块均可以正常工做,

例如登陆后以下图所示:

 

登陆成功后才能够进行朋友圈(微圈)并进行发表评论等操做,以下图:

 

各个模块的成功运行的截图在此不一一介绍。

第6章结束语

本文结合本实验室与学校合做的实际项目,设计并开发了基于安卓的移动客户端系统,包括手机应用以及相应的服务器端接口的开发。根据学校的需求,咱们进行了需求分析并进行了模块划分与开发流程的设计,通过几个月的努力,软件系统顺利开发完成,并与学校人员完成了交接,用户的意见反馈代表,整个系统运行稳定,可以知足学校和用户需求。

6.1论文工做总结

本文主要介绍实际项目的中移动客户端软件系统的设计和开发工做,在可行性分析完成后,制定了需求分析并肯定了开发流程图,对用到的Android等系统相关的技术知识进行了介绍,涉及的技术包括Android应用开发,基于Tomcat,MySQL, JAVA等服务器端接口的设计与开发。本文完成了Android应用全部界面的设计、各个功能模块实现以及对应的数据库关系设计和服务器端接口的实现。论文详细说明了客户端各个功能模块的实现细节,同时也讲解了服务器端接口的实现方法,并以登陆接口为例进行了详细说明。最终完成了移动客户端应用系统的开发。

6.2系统运行情况

测试完成后由学校相关人员进行验收,验收过程是愉快的,应用在网上发布后全部人员就均可以使用了,根据用户的反映,系统运行情况良好,同时使用用户达300人时不会有明显的延迟,用户体验效果良好,软件运行稳定。

6.3问题和展望

本移动客户端软件系统的开发工做己经取得阶段性成果,之后还会继续开发第二版软件,在运行过程当中会累积用户反馈的意见的新的需求,在之后的工做中还会对软件系统进行不断的优化改进和增长新的功能。之后的功能改进可能包括如下几点:

(1)     如今只能记住一个用户的用户名并自动填写,之后可能会增长支持记住多个帐号并实现切换帐号功能。

(2)     如今朋友圈只一次发表一张图片,之后可能会增长支持同时发表多张图片的功能

(3)     如今用户还不能修改本身的用户头像,这部分下一个版本也是要加上的。

(4)     )加强客户端软件在不一样设备上运行时候的兼容性,尤为是手机和平板的兼容性。

参考文献

[1] 马越.Android的架构与应用「D].中国地质大学(北京),2008.

[2] 沈爱涛,程涛.基于Android平台的应用系统开发环境研究[[J].计算机光盘软件与应用,2013, (7):247-247.

[3] 贾震斌,董洪逾,陈娟等.Android应用开发中多任务机制剖析[[J].福建电脑,2013, 29(9):46-47.

[4] Brestovac G, Grbac T G, Grgurina R. Development environment for Androidapplication development: An experience report.[J]. MIPRO, 2011 Proceedings ofthe 34th International Convention, 2011:1693一1698.

[5] 周辉.基于Android移动学习平台研究与实现[D].电子科技大学,2012.

[6]  Peng B, Yue J, Tianzhou C. The Android Application Development College Challenge[J]. High Performance Computing and Communication&2012 IEEE9th   International   Conference   on   Embedded   Software   and   Systems (HPCC-ICESS), 2012 IEEE 14th International Conference on, 2012, 248(4):1677一1681.

致谢

    至此,这篇论文己经接近尾声。首先我要感谢个人论文指导老师一一xxx

老师,在许志闻老师的帮助和指导下,遇到的无数困难和疑惑都获得了解决。在

论文写做过程当中,朋友和同窗热情帮助我查找资料和提供格式的修改建议,没有

他们的帮助,论文就不会这么顺利的完成。还要感谢吉林大学提供了这么好的学

习和实验环境,让我能方便的在图书馆和网上查找相关资料。最后还要感谢一直

在默默支持和鼓励我努力学习的父母,谢谢大家!

 

代码之间工做室,专业计算机程序设计。

技术交流QQ群:439261058

商务合做加QQ:1215714557

相关文章
相关标签/搜索