资源描述
山东科技大学本科毕业设计(论文)
摘 要
现在,人们越来越重视互联网。xxxx可以为花卉爱好者们提供一个交流以及交易的平台,在这里花卉爱好者们可以的到最新的花卉信息以及购买到喜欢的花卉品种。
本文综合运用Android技术、Android Studio开发平台、JSON等技术和工具对xxxx进行了分析、设计和实现。给出了系统的功能分析、环境和质量要求;建立了系统软、硬件体系结构模型;完成了功能模块设计和数据接口的对接;同时确定了各个功能模块的测试环境,并制定了测试方案对各个模块进行有效的测试和分析;最终实现了Android平台端的应用。
项目采用MVP架构,MVP模式是MVC模式的一个演化版本,MVP全称Model-View-Presenter。MVP模式会解除View与Model的耦合,有效的降低View的复杂性。同时又带来了良好的可扩展性、可测试性,保证系统的整洁性和灵活性。MVP模式可以分离显示层与逻辑层,它们之间通过接口进行通信,降低耦合。理想化的MVP模式可以实现同一份逻辑代码搭配不同的显示界面,因为它们之间并不依赖与具体,而是依赖于抽象。这使得Presenter可以运用于任何实现了View逻辑接口的UI,使之具有更广泛的适用性,保证了灵活度。
总之,本系统可以通过对智能家居系统的控制和受控方状态的反馈,从而使操作者可以及时掌握受控方信息,使其达到交互式智能化。更好地服务于我们的生活,使人们的日常生活更加方便、智能、快捷。
关键词:花卉;Android;JSON;MVP;在线购物
Abstract
Nowadays , people are paying more and more attention to the internet. Flower nap provides a platform for the exchange and exchange of flower lovers , where the flower lovers can get the latest information about flowers and buy the flowers they like.
In this paper , Android technology , Android Studio development platform , JSON and other techniques and tools are used to analyze , design and implement the nap. The analysis , given the function of the system environment and quality requirements; establish a system structure model of software and hardware system; the completion of the docking module design and data interface; while determining the test environment of each module , and developed a test scheme for testing and analysis of the effective of each module; finally realizes the application of Android platform the end of the.
The project uses the MVP architecture , and the MVP model is an evolved version of the MVC schema , MVP , full name Model-View-Presenter. The MVP pattern removes the coupling of View and Model , effectively reducing the complexity of View. At the same time , it also brings good scalability and testability , and ensures the neatness and flexibility of the system. The MVP model can separate the display layer from the logical layer , through which they can communicate and reduce the coupling. The idealized MVP model can implement the same logical code with different display interfaces , because they do not depend on and depend on abstractions , but depend on abstractions. This allows the Presenter to be applied to any UI that implements the View logical interface , making it more widely applicable and providing flexibility.
In a word , the system can control the intelligent home system and the feedback of the controlled state , so that the operator can grasp the information of the accuser in time and make it interactive and intelligent. Better serve our life , make people's daily life more convenient , intelligent and quick.
keywords: flower; Android; JSON; MVP; shopping online
目 录
1 绪论 1
1.1 研发背景 1
1.2 主要研究内容 2
1.3 论文组织结构 2
2 课题研究相关技术综述 4
2.1 Android 系统 4
2.2 Sqlite数据库 9
2.3 JSON数据 11
2.4 Java环境 12
2.5 设备环境 16
3 系统需求分析 17
3.1 需求调查 17
3.2 功能分析 18
4 系统需求分析 19
4.1 系统设计环境 19
4.2 系统体系结构设计 19
5.1 项目设计 20
5.2 数据接口设计 23
6 系统实现 28
6.2 系统测试 41
7 总结与展望 44
7.1 总结 44
7.2 展望 44
参考文献 45
致谢 46
附录一:英文原文 47
附录二:中文译文 48
1 绪论
1.1 研发背景
近些年,随着Internet和计算机网络通信技术的飞速发展、人们生活水平的不断提高,以及人们精神需求的不断增长,移动应用已几乎成为每个人都会使用的东西,无论男女老少,就比如我外公,前几年就在学习怎么使用浏览器百度养生知识,虽然我外公之前没有接触过这些,但是在我的耐心讲解下,而且移动应用的操作也比较好上手,我外公还是轻松地学会了。大家对移动应用充满了好奇心以及求知欲,并且随着移动手机越来越成为人们生活中不可缺失的一部分,移动应用便随着这个趋势大大发展了起来。然后互联网+模式顺势而生,它能够做到让人们不出门,甚至是躺在床上,光是动动手指就可以获取各种最新信息或者购买远在天边的商品,给人们的生活带来了极大的便利。
再说到我这个软件,xxxx是一款花艺爱好者的App,它不仅仅是有专业的花艺教学内容,它还是一个活跃的百万花艺爱好者社区。在这里,你可以看到各式各样的话题讨论,不仅限于花艺,还延伸至家居、植物、杂物等生活美学领域。
「xxxx」还提供了众多高清花艺壁纸,供你下载换桌面,可以适配各种屏幕尺寸。手机的美观再也不愁了。
「xxxx」是一款花艺爱好者不容错过的生活应用。在这里,收获的不仅仅是花艺知识,还有同道中人和美的生活方式。让你的节奏,慢下来,美下去。
作为一个植物生活美学平台,「xxxx」还提供跟花艺与生活美学相关的物品贩卖,如鲜花、器皿、干花、书籍等。你可以在这里寻找生活的美。
「xxxx」创办初衷是想为所有喜欢植物和美学的人们,通过花草与时间的叠加,营造一个小而美的精致生活。希望能让用户在繁琐的生活之中,享受一种静雅恬淡的生活之美,制造一份专属的美学生活态度。
1.2 主要研究内容
本文采用面向对象软件开发方法,遵照软件工程的概念、原理和方法,利用Android Studio开发平台控制系统的分析、设计和实现。所开发的控制系统主要具备以下功能:
(1)浏览帖子:可以通过App来查看其他用户发布的与花卉有关的帖子。
(2)购买花卉:可以通过App来进行在线的花卉购买。
(3)发布帖子:可以发布帖子,并且上传图片以及选择分类等。
1.3 论文组织结构
本文共分七章,各章的主要内容如下:
第一章“绪论”部分主要综述了系统的开发背景、论文研究的主要内容以及组织结构。
第二章“课题研究相关技术综述”部分对论文研究中所用到的开发工具、平台及技术、设备环境做了简单的介绍。
第三章“系统需求分析”部分主要描述了系统的需求分析过程,包括系统的需求调查、功能分析环境和质量要求。
第四章“系统总体设计”部分对系统的总体设计过程做了阐述,主要包括系统的设计环境,系统体系结构和数据库的逻辑设计。
第五章“系统详细设计”部分叙述了系统的详细设计过程,包括项目设计、系统的功能模块设计和数据接口的设计。
第六章“系统实现”部分对系统实现和测试做了概述,主要包括系统各功能模块的实现、核心技术编码、系统的测试过程等。
第七章“总结与展望”部分讲述了对系统开发的总结和对下一步工作的预测。
2 课题研究相关技术综述
2.1 Android 系统
Android是一种以l i n u x为基础的开放源代码操作系统,主要使用于便携设备。目前尚未有统一中文名称,中国大陆地区较多人使用“安卓”或“安致”。Android操作系统最初由Andy Rubin开发,最初主要支持手机。2005年由谷歌收购注资,并组建开放手机联盟开发改良,逐渐扩展到平板电脑及其他领域上。Android的主要竞争对手是苹果公司的i o s以及RIM的Blackberry OS。2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一。 2012年2月数据,Android占据全球智能手机操作系统市场52.5%的份额,中国市场占有率为68.4%。
Android的系统架构和其它操作系统一样,采用了分层的架构。android分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和l i n u x核心层。
Android是以Linux为核心的手机操作平台,作为一款开放式的操作系统,随着Android的快速发展,如今已允许开发者使用多种编程语言来开发Android应用程序,而不再是以前只能使用Java开发Android应用程序的单一局面,因而受到众多开发者的欢迎,成为真正意义上的开放式操作系统。
在Android中,开发者可以使用Java作为编程语言来开发应用程序,也可以通过NDK使用C/C++作为编程语言来开发应用程序,也可使用SL4A来使用其他各种脚本语言进行编程(如:python、l u a、t cl、p h p等等),还有其他诸如:QT(qt for android)、Mono(mono for android)等一些著名编程框架也开始支持Android编程,甚至通过Mon o Droid,开发者还可以使用C#作为编程语言来开发应用程序。另外,谷歌还在2009年特别发布了针对初学者的Android Simple语言,该语言类似Basic语言。而在网页编程语言方面,JavaScript , HTML5等等都已经支持Android开发。
2.1.1 Android 基本架构
Android系统架构自上而下可分为应用程序层、应用程序框架层、系统运行库层、系统内核层四个层次,如图 2.1 所示。
图 2.1 Android 系统架构图
(1)应用程序(Applications)
该层提供一些核心应用程序包,例如电子邮件、短信、日历、地图、浏览器和联系人管理等。同时,开发者可以利用Java语言设计和编写属于自己的应用程序,而这些程序与那些核心应用程序彼此平等、友好共处。
(2)应用程序框架(Application Framework)
该层是Android应用开发的基础,开发人员大部分情况是在和她打交道。应用程序框架层包括活动管理器、窗口管理器、内容提供者、视图系统、包管理器、电话管理器、资源管理器、位置管理器、通知管理器和XMPP服务十个部分。在Android平台上,开发人员可以完全访问核心应用程序所使用的API框架。并且,任何一个应用程序都可以发布自身的功能模块,而其他应用程序则可以使用这些已发布的功能模块。基于这样的重用机制,用户就可以方便地替换平台本身的各种应用程序组件。
(3)系统运行库(Libraries)
系统库包括九个子系统,分别是图层管理、媒体库、SQLite、OpenGLEState、FreeType、WebKit、SGL、SSL和libc。Android运行时包括核心库和Dalvik虚拟机,前者既兼容了大多数Java语言所需要调用的功能函数,又包括了Android的核心库,比如android.os、android.NET、android.media等等。后者是一种基于寄存器的java虚拟机,Dalvik虚拟机主要是完成对生命周期的管理、堆栈的管理、线程的管理、安全和异常的管理以及垃圾回收等重要功能。
(4)系统内核(Linux Kernel)
Android核心系统服务依赖于Linux2.6内核,如安全性、内存管理、进程管理、网络协议栈和驱动模型。Linux内核也是作为硬件与软件栈的抽象层。驱动:显示驱动、摄像头驱动、键盘驱动、WiFi驱动、Audio驱动、flash内存驱动、Binder(IPC)驱动、电源管理等。
2.1.2 Android 开发环境搭建
Android 平台为开发者提供了免费并且开放的开发环境,而且使用其提供的帮助文档和工具,开发者能够快速地编写出需要的APP。学习Android开发的第一步就是搭建Android的开发环境,开发环境的搭建步骤如下:
(1)第一步:安装JDK
下载Oracle公司的JDK可以百度“JDK”进入Oracle公司的JDK下载页面,选择自己电脑系统的对应版本即可。
JDK的全称是Java SE Development Kit,也就是Java 开发工具箱。SE表示标准版。JDK是Java的核心,包含了Java的运行环境(Java Runtime Environment),一堆Java工具和给开发者开发应用程序时调用的Java类库。
JDK包含的基本工具主要有:
javac:Java编译器,将源代码转成字节码。
jar:打包工具,将相关的类文件打包成一个文件。
javadoc:文档生成器,从源码注释中提取文档。
jdb:debugger,调试查错工具。
java:运行编译后的java程序。
(2)配置JDK的变量环境
为了配置JDK的系统变量环境,我们需要设置三个系统变量,分别是JAVA_HOME,Path和CLASSPATH。下面是这三个变量的设置防范。
JAVA_HOME
先设置这个系统变量名称,变量值为JDK在你电脑上的安装路径:C:\Program Files\Java\jdk1.8.0_20。创建好后则可以利用%JAVA_HOME%作为JDK安装目录的统一引用路径。
PATH
PATH属性已存在,可直接编辑,在原来变量后追加:;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin 。
CLASSPATH
设置系统变量名为:CLASSPATH 变量值为:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar 。
注意变量值字符串前面有一个"."表示当前目录,设置CLASSPATH 的目的,在于告诉Java执行环境,在哪些目录下可以找到您所要执行的Java程序所需要的类或者包。
(3)下载 Android Studio
Android Studio 是一个Android集成开发工具,基于IntelliJ IDEA. 类似 Eclipse ADT,Android Studio 提供了集成的 Android 开发工具用于开发和调试。
2013年5月16日,在I/O大会上,谷歌推出新的Android开发环境——Android Studio,并对开发者控制台进行了改进,增加了五个新的功能。
Android Studio是谷歌推出了新的Android开发环境,开发者可以在编写程序的同时看到自己的应用在不同尺寸屏幕中的样子。
2015年5月29日,在谷歌I/O开发者大会上,谷歌发布Android Studio 1.3版,支持C++编辑和查错功能。Android Studio 1.3版开发码代码变得更加容易,速度提升,而且支持C++编辑和查错功能。
(4)下载Android SDK
配置了JDK变量环境,安装好了Eclipse,这个时候如果只是开发普通的JAVA应用程序,那么Java的开发环境已经准备好了。我们要通过Eclipse来开发Android应用程序,那么我们需要下载Android SDK(Software Development Kit)和在Eclipse安装ADT插件,这个插件能让Eclipse和Android SDK关联起来。
Android SDK提供了开发Android应用程序所需的API库和构建、测试和调试Android应用程序所需的开发工具。
下载后双击安装,指定Android SDK的安装目录,为了方便使用Android SDK包含的开发工具,我们在系统环境变量中的Path设置Android SDK的安装目录下的tools目录。
在Android SDK的安装目录下,双击“SDK Manager.exe”,打开Android SDK Manager,Android SDK Manage负责下载或更新不同版本的SDK包,我们看到默认安装的Android SDK Manager只安装了一个版本的sdk tools。
2.2 Sqlite数据库
SQLite是D.Richard Hipp用C语言编写的开源嵌入式数据库引擎。它支持大多数的SQL92标准,并且可以在所有主要的操作系统上运行。
SQLite由以下几个部分组成:SQL编译器、内核、后端以及附件。SQLite通过利用虚拟机和虚拟数据库引擎( VDBE ),是调试、修改和扩展SQLite的内核变得更加方便。所有SQL语句都被编译成易读的、可以在SQLite虚拟机中执行的程序集。SQLite的整体结构图如下:
值得一提的是,袖珍型的SQLite竟然可以支持高达2TB大小的数据库,每个数据库都是以单个文件的形式存在,这些数据都是以B-Tree的数据结构形式存储在磁盘上。
在事务处理方面,SQLite通过数据库级上的独占性和共享锁来实现独立事务处理。这意味着多个进程可以在同一时间从同一数据库读取数据,但只有一个可以写入数据。在某个进程或线程想数据库执行写操作之前,必须获得独占锁。在获得独占锁之后,其他的读或写操作将不会再发生。
SQLite采用动态数据类型,当某个值插入到数据库时,SQLite将会检查它的类型,如果该类型与关联的列不匹配,SQLite则会尝试将该值转换成该列的类型,如果不能转换,则该值将作为本身的类型存储,SQLite称这为“弱类型”。但有一个特例,如果是INTEGER PRIMARY KEY,则其他类型不会被转换,会报一个“datatype missmatch”的错误。
概括来讲,SQLite支持NULL、INTEGER、REAL、TEXT和BLOB数据类型,分别代表空值、整型值、浮点值、字符串文本、二进制对象。
SQLite的特点大致总结如下:
1.轻量级
使用 SQLite 只需要带一个动态库,就可以享受它的全部功能,而且那个动态库的尺寸想当小。
2.独立性
SQLite 数据库的核心引擎不需要依赖第三方软件,也不需要所谓的“安装”。
3.隔离性
SQLite 数据库中所有的信息(比如表、视图、触发器等)都包含在一个文件夹内,方便管理和维护。
4.跨平台
SQLite 目前支持大部分操作系统,不至电脑操作系统更在众多的手机系统也是能够运行,比如:Android和IOS。
5.多语言接口
SQLite 数据库支持多语言编程接口。
6.安全性
2.3 JSON数据
JSON( JavaScript Object Notation , JS 对象标记 ) 是一种轻量级的数据交换格式。它基于 ECMAScript ( w3c制定的js规范 )的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
在 JS 语言中,一切都是对象。因此,任何支持的类型都可以通过 JSON 来表示,例如字符串、数字、对象、数组等。但是对象和数组是比较特殊且常用的两种类型:对象表示为键值对、数据由逗号分隔、花括号保存对象、方括号保存数组。
在 JS 语言中,一切都是对象。因此,任何支持的类型都可以通过 JSON 来表示,例如字符串、数字、对象、数组等。但是对象和数组是比较特殊且常用的两种类型。
对象:对象在 JS 中是使用花括号包裹 {} 起来的内容,数据结构为 {key1:value1 , key2:value2 , ...} 的键值对结构。在面向对象的语言中,key 为对象的属性,value 为对应的值。键名可以使用整数和字符串来表示。值的类型可以是任意类型。
数组:数组在 JS 中是方括号 [] 包裹起来的内容,数据结构为 ["java" , "javascript" , "vb" , ...] 的索引结构。在 JS 中,数组是一种比较特殊的数据类型,它也可以像对象那样使用键值对,但还是索引使用得多。同样,值的类型可以是任意类型。
2.4 Java环境
2.4.1 Java简介
Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。
Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等。
2.4.2 Java特性
(1)简单性
Java看起来设计得很像C++,但是为了使语言小和容易熟悉,设计者们把C++语言中许多可用的特征去掉了,这些特征是一般程序员很少使用的。例如,Java不支持go to语句,代之以提供break和continue语句以及异常处理。Java还剔除了C++的操作符过载(overload)和多继承特征,并且不使用主文件,免去了预处理程序。因为Java没有结构,数组和串都是对象,所以不需要指针。Java能够自动处理对象的引用和间接引用,实现自动的无用单元收集,使用户不必为存储管理问题烦恼,能更多的时间和精力花在研发上。
(2)面向对象
Java是一个面向对象的语言。对程序员来说,这意味着要注意应中的数据和操纵数据的方法(method),而不是严格地用过程来思考。在一个面向对象的系统中,类(class)是数据和操作数据的方法的集合。数据和方法一起描述对象(object)的状态和行为。每一对象是其状态和行为的封装。类是按一定体系和层次安排的,使得子类可以从超类继承行为。在这个类层次体系中有一个根类,它是具有一般行为的类。Java程序是用类来组织的。
Java还包括一个类的扩展集合,分别组成各种程序包(Package),用户可以在自己的程序中使用。例如,Java提供产生图形用户接口部件的类(java.awt包),这里awt是抽象窗口工具集(abstract windowing toolkit)的缩写,处理输入输出的类(java.io包)和支持网络功能的类(包)。
(3)分布性
Java设计成支持在网络上应用,它是分布式语言。Java既支持各种层次的网络连接,又以Socket类支持可靠的流(stream)网络连接,所以用户可以产生分布式的客户机和服务器。
网络变成软件应用的分布运载工具。Java程序只要编写一次,就可到处运行。
(4)编译和解释性
Java编译程序生成字节码(byte-code),而不是通常的机器码。Java字节码提供对体系结构中性的目标文件格式,代码设计成可有效地传送程序到多个平台。Java程序可以在任何实现了Java解释程序和运行系统(run-time system)的系统上运行。
在一个解释性的环境中,程序开发的标准“链接”阶段大大消失了。如果说Java还有一个链接阶段,它只是把新类装进环境的过程,它是增量式的、轻量级的过程。因此,Java支持快速原型和容易试验,它将导致快速程序开发。这是一个与传统的、耗时的“编译、链接和测试”形成鲜明对比的精巧的开发过程。
(5)稳健性
Java原来是用作编写消费类家用电子产品软件的语言,所以它是被设计成写高可靠和稳健软件的。Java消除了某些编程错误,使得用它写可靠软件相当容易。
Java是一个强类型语言,它允许扩展编译时检查潜在类型不匹配问题的功能。Java要求显式的方法声明,它不支持C风格的隐式声明。这些严格的要求保证编译程序能捕捉调用错误,这就导致更可靠的程序。
可靠性方面最重要的增强之一是Java的存储模型。Java不支持指针,它消除重写存储和讹误数据的可能性。类似地,Java自动的“无用单元收集”预防存储漏泄和其它有关动态存储分配和解除分配的有害错误。Java解释程序也执行许多运行时的检查,诸如验证所有数组和串访问是否在界限之内。
异常处理是Java中使得程序更稳健的另一个特征。异常是某种类似于错误的异常条件出现的信号。使用try/catch/finally语句,程序员可以找到出错的处理代码,这就简化了出错处理和恢复的任务
(6)安全性
Java的存储分配模型是它防御恶意代码的主要方法之一。Java没有指针,所以程序员不能得到隐蔽起来的内幕和伪造指针去指向存储器。更重要的是,Java编译程序不处理存储安排决策,所以程序员不能通过查看声明去猜测类的实际存储安排。编译的Java代码中的存储引用在运行时由Java解释程序决定实际存储地址。
Java运行系统使用字节码验证过程来保证装载到网络上的代码不违背任何Java语言限制。这个安全机制部分包括类如何从网上装载。例如,装载的类是放在分开的名字空间而不是局部类,预防恶意的小应用程序用它自己的版本来代替标准Java类。
(7)可移植性
Java使得语言声明不依赖于实现的方面。例如,Java显式说明每个基本数据类型的大小和它的运算行为(这些数据类型由Java语法描述)。
Java环境本身对新的硬件平台和操作系统是可移植的。Java编译程序也用Java编写,而Java运行系统用ANSIC语言编写。
(8)高性能
Java是一种先编译后解释的语言,所以它不如全编译性语言快。但是有些情况下性能是很要紧的,为了支持这些情况,Java设计者制作了“及时”编译程序,它能在运行时把Java字节码翻译成特定CPU(中央处理器)的机器代码,也就是实现全编译了。
Java字节码格式设计时考虑到这些“及时”编译程序的需要,所以生成机器代码的过程相当简单,它能产生相当好的代码。
(9)多线索性
Java是多线索语言,它提供支持多线索的执行(也称为轻便过程),能处理不同任务,使具有线索的程序设计很容易。Java的lang包提供一个Thread类,它支持开始线索、运行线索、停止线索和检查线索状态的方法。
Java的线索支持也包括一组同步原语。这些原语是基于监督程序和条件变量风范,由C.A.R.Haore开发的广泛使用的同步化方案。用关键词synchronized,程序员可以说明某些方法在一个类中不能并发地运行。这些方法在监督程序控制之下,确保变量维持在一个一致的状态。
(10)动态性
Java语言设计成适应于变化的环境,它是一个动态的语言。例如,Java中的类是根据需要载入的,甚至有些是通过网络获取的。
2.5 设备环境
设备名称:LG Nexus 5(16GB)
主屏尺寸:4.95英寸
主屏分辨率:1920x1080像素
后置摄像头:800万像素
前置摄像头:130万像素
电池容量:2300mAh
电池类型:不可拆卸式电池
核心数:四核
内存:2GB
Android版本:Android 6.0.1
3 系统需求分析
3.1 需求调查
通过网络搜索、查阅相关资料以及与用户进行访谈等方式,对用户的需求进行了详细的调研,并对用户在环境监测、视频监控、家庭管理及开关控制和场景模式等方面的需求进行了详细的探讨,确定了智能家居控制系统的主要功能需求。功能分解图如图3.1所示。
xxxx
专题
发现
发布帖子
商城
我的
图3.1 xxxx的功能分解图
分析得主要功能如下:
(1)专题,该页面分为小编推荐、专题分类、每日壁纸以及每日推荐。
(2)发现:该页面分为精选、圈子以及订阅。
(3)发布帖子:如果未登录,点击该按钮跳转到登陆页面,如果已登录,点击该按钮跳转到发布帖子页面。
(4)商城:可以在该页面选购喜欢的花卉,并且加入购物车然后付款购买。
(5)我的:可以在该页面中管理自己的个人信息以及点赞的帖子以及评论。
3.2 功能分析
3.2.1 系统框架图
根据在需求调查时得到的结果,本文通过对xxxx系统功能分析,建立了系统的主体框架如图3.2所示。
图3.2 xxxx系统整体架构图
3.2.2 系统各部分描述
由图3.2可以看出,系统主要包括五个部分:专题部分、发现部分、商城部分、发表帖子部分以及我的部分。其中,每个部分的交互过程如下:
(1)专题部分
此部分为这个系统的第一部分,它主要负责展示每日精选帖子、精选壁纸以及所有帖子分类。
(2)发现部分
此部分是用来显示精选、圈子以及订阅的内容。
(3)商城
此部分用来方便用户购买各种花卉。
(4)发表帖子
此部分用于用户发表自己的帖子。
(5)我的
此部分用户用户查看以及修改自己的个人信息,查看自己的帖子的点赞情况。
4 系统需求分析
4.1 系统设计环境
4.1.1 软件环境
(1)Java,版本为1.8.0_112。
(2)Android Studio,版本为2.3.2。
4.1.2 硬件环境
(1)Mac OS X EI Captian 10.11.6。
(2)Android平台:Android版本需要高于4.4。
4.2 系统体系结构设计
4.2.1 C/S体系结构
B/S模式,相对于C/S结构而言易于拓展,开发周期短,而且移植方便,不须安装客户端( 客户端只使用浏览器 ),可以跨平台使用。但其缺点是客户端的处理能力差,无文件和目录的操作能力,也不容易完成与其它程序之间的数据交互;同时,考虑到要保证便携性以及安全性,由于B/S模式在数据交互时,其数据的安全性很难保证;而C/S模式却恰恰可以封装Client和Server之间的数据交互,也能够很好实现对Client的控制和操作,所以它适合于该App系统。
可以说,支持采用C/S的理由主要有:应用的不确定性,系统的扩展性,逐步开发和增加新应用的需要,适应将来开放的异种网络环境中应用的需要,用户数、数据量增长的可能性,适应电脑开发、维护、供应商与相关技术人员变更的需要,有利于动态规划与动态开发过程,对系统可靠性有保证。
5 系统详细设计
5.1 项目设计
5.1.1 项目构架
该项目采用MVP架构,该架构是Android平台MVC框架的升级,MVC全称是Model - View - Controller,是模型( model )-视图( view )-控制器( controller )的缩写。MVC是一种框架模式而非设计模式,GOF把MVC看作是3种设计模式:观察者模式、策略模式与组合模式的合体,而核心是观察者模式。简而言之,框架是大智慧,用来对软件设计进行分工;设计模式是小技巧,对具体问题提出解决方案,以提高代码复用率,降低耦合度。MVP架构是在MVC的基础上进行的升级,MVP模式是MVC模式的一个演化版本,MVP全称Model-View-Presenter。目前MVP在Android应用开发中越来越重要了。在Android中,业务逻辑和数据存取是紧紧耦合的,很多缺乏经验的开发者很可能会将各种各样的业务逻辑塞进某个Activity、Fragment或者自定义View中,这样会使得这些组件的单个类型臃肿不堪。如果不将具体的业务逻辑抽离出来,当UI变化时,你就需要去原来的View中抽离具体业务逻辑,这必然会很麻烦并且易出错。MVP模式会解除View与Model的耦合,有效的降低View的复杂性。同时又带来了良好的可扩展性、可测试性,保证系统的整洁性和灵活性。MVP模式可以分离显示层与逻辑层,它们之间通过接口进行通信,降低耦合。理想化的MVP模式可以实现同一份逻辑代码搭配不同的显示界面,因为它们之间并不依赖与具体,而是依赖于抽象。这使得Presenter可以运用于任何实现了View逻辑接口的UI,使之具有更广泛的适用性,保证了灵活度。
MVP模式的三个角色
(1)Presenter – 交互中间人:Presenter主要作为沟通View与Model的桥梁,它从Model层检索数据后,返回给View层,使得View与Model之间没有耦合,也将业务逻辑从View角色上抽离出来。
(2)View – 用户界面:View通常是指Activity、Fragment或者某个View控件,它含有一个Presenter成员变量。通常View需要实现一个逻辑接口,将View上的操作转交给Presenter进行实现,最后,Presenter 调用View逻辑接口将结果返回给View元素。
(3)Model – 数据的存取:Model 角色主要是提供数据
展开阅读全文