广东海洋大学软件工程课程设计报告书
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本科生课程设计
课程名称软件工程课程设计
课程编号16532115
学号
学生姓名
所在专业计算机科学与技术
所在班级
指导教师孙兵
成绩
教师签字
评语:
目录
摘要 (3)
1引言 (4)
1.1课题背景................................................................................ 错误!未定义书签。
1.2项目的目的及意义................................................................ 错误!未定义书签。
1.3国内外现状与发展................................................................ 错误!未定义书签。
2基于安卓平台的新闻客户端所用关键技术............................... 错误!未定义书签。
2.1JSON数据传输格式............................................................... 错误!未定义书签。
2.2SQLite数据库....................................................................... 错误!未定义书签。
2.3SP存储................................................................................... 错误!未定义书签。
2.4Volley网络通讯框架........................................................... 错误!未定义书签。
3基于安卓平台的新闻客户端需求分析....................................... 错误!未定义书签。
3.1系统描述................................................................................ 错误!未定义书签。
3.2新闻客户端功能性需求分析................................................ 错误!未定义书签。
3.3系统非功能性需求分析 (6)
4基于安卓平台的新闻客户端概要设计 (8)
4.1 系统架构设计 ........................................................................ 错误!未定义书签。
4.2 系统客户端总体架构 (8)
4.3系统客户端功能模块划分 (8)
4.2 数据库设计 (8)
5基于安卓平台的新闻客户端的设计与实现 (8)
5.1 新闻模块的设计与实现 (8)
5.2 跟帖模块的设计与实现 (10)
5.3 图片模块的设计与实现 ........................................................ 错误!未定义书签。
5.4 网络请求方案的设计与实现 ................................................ 错误!未定义书签。
6系统测试与总结.. (15)
6.1 测试 (14)
6.2 总结 ........................................................................................ 错误!未定义书签。
参考文献 (15)
摘要
随着移动互联网行业的蓬勃发展,新闻客户端带领新闻资讯阅读者进入了新媒体时代。
新闻客户端具有便携性、内容丰富、及时性和用户体验优秀四个特点。
新闻客户端的设计在于提供给新闻资讯阅读者一个开放的平台,以充分表达个人观点为主旨,让用户成为有态度的新闻阅读者。
提供优质丰富的内容资源和优秀的用户体验,同时提供多种阅读方式以提高新闻获取效率。
以专业人员调研得到的市场需求分析结果为依据,本文描述了基于Android 平台的新闻客户端的设计与实现。
该新闻客户端共分为七个主要功能模块,包括新闻、跟帖、投票、图片和订阅等。
本文首先分析了新闻客户端项目的背景以及国内外同类产品的发展现状,阐述了项目意义并提出项目的最终目标,然后描述了本项目所应用到的各项关键技术,接着对新闻客户端做了功能与非功能方面的需求分析,以需求分析为基础,针对本项目的整体做了架构设计,最后针对各个功能模块做出设计与实现方案。
本人在整个项目研发过程中,参与到客户端的需求分析、概要设计、详细设计、编码实现、测试修改等工作。
该新闻客户端的编码实现工作由本人独立完成,具体功能模块包括:新闻、订阅、跟帖、图片、投票、个人中心、设置。
模块设计过程中遵循软件工程设计思想,满足需求的同时具有良好的可维护性与可扩展性,方便维护升级。
新闻、订阅、图片功能模块涉及到频繁获取网络图片的操作,通过对比分析Android平台网络通信技术,最终选取使用Volley网络通信框架,该框架的使用更加灵活并支持功能自定义,同时使用JSON数据交互格式,提高数据传输效率。
论文最后展示了项目的最终运行结果。
本项目己通过测试团队的测试,发布在安卓应用商店中,第三方数据收集结果显示本应用运行正常。
关键词:新闻客户端;Android平台;新媒体;移动产品;Volley; JSON
新闻客户端的设计与实现
计算机科学与技术专业,
指导教师:孙兵
引言
本章主要介绍了项目的背景,通过对比国内外的发展状况,提出项目需要解决的问题,同时针对当前的问题提出了基本的解决方案,描述项目的基本目标,同时阐述了实现该项目的意义及目的。
1.1课题背景
随着智能手机和平板电脑的普及,移动互联网行业发展迅速,用户数量日益庞大。
截至2012年9月底,全球移动互联网用户已经达到15亿,强大的用户基群产生了竞争激烈的移动应用市场,传统媒体和门户网站也随之发生改变。
传统的热门门户网站:网易、腾讯、新浪、搜狐等业内领先者纷纷发布手机客户端。
新闻应用的发展与用户的资讯信息获取需求密不可分,在信息爆炸的互联网时代,用户对新闻获取的途径也发生改变,在新媒体时代,利用互联网来获取新闻消息已经成为必然的趋势,网络成为传播新闻资讯的首要媒介,之所以新闻客户端具有强大生命力是因为相比于传统媒体,客户端具有如下的优势:
(1)便携性:智能手机与平板电脑都可随身携带,并且智能手机逐渐成为用户的生活必备品。
(2)海量获取:同以往的报纸,杂志,新闻周刊等传统媒介不同,新闻客户端承载的信息量远远大于传统媒体的内容,内容丰富成为其重要特征之一。
(3)及时性:新闻本身具备即时性,这一特点可以利用新闻客户端完好的体现,随着无线网络的发展,智能设备的使用者能够随时随地获取最新的新闻消息。
(4)优秀的用户体验:新闻阅读者可以通过智能设备进行个性化定制,订阅各具特色的新闻栏目,支持新闻评论,提供新闻阅读者之间的互动。
1.2项目目的及意义
在支持新闻获取的基本功能的基础上,增加跟帖与投票功能,让新闻应用更加开放友好,方便表达新闻阅读者对新闻事件的态度,成为有态度的新闻资讯体验者。
投票功能体现出真实的民意,图片新闻的资源整合与分类和听新闻功能都为用户提供了高效便捷的新闻获取途径,提高用户的新闻获取效率,优秀的多媒体资源获取技术给用户带来更便捷的用户体验。
Android新闻客户端目标:在提供获取新闻的基本功能的前提下,进一步进行用户需求挖掘,提供良好的用户体验,提高服务的响应速度,针对以上问题提出如下基本目标:
(1)对图片进行分类展示,方便用户筛选新闻内容,包括以下专栏:热点图集、独家图集、明星图集、体坛图集、精美图集。
(2)提供新闻收听功能,提高获取新闻资讯的效率,增加‘听新闻’专栏,并提供‘下载’功能,支持‘离线收听新闻’功能。
(3)向用户开放注册功能,支持评论跟帖,挖掘有热度的跟帖并展示给用户精彩跟帖内容,在新闻浏览过程中提供社交元素,改善用户体验。
设置跟帖专栏,具体分为‘精彩跟帖’和‘今日排行’两个功能点。
(4)针对多媒体资源的网络传输,采用异步交互与本地缓存相结合的策略,减少用户的等待时间。
(5)增加新闻搜索功能,用户可输入新闻关键字进行新闻搜索,反馈给用户匹配的新闻列表。
(6)实现‘聚合阅读’专栏,以扁平化的设计方案为用户提供新闻资讯,包括以下类别:新闻NEWS、体育SPORTS、财经FINANCE、科技TECH、娱乐ENT o
(7)实现焦点新闻意见投票功能。
用户可以针对当日最热点的新闻进行投票表达自己的立场观点,用户投票后可以查看统计结果,本功能模块同时支持查看往日的热点问题投票结果。
(8)主功能页展示娱乐、体育、图片、财经、科技、汽车等主要功能栏目,分类显示不同类别的新闻内容。
(9)增加个人中心,实现用户的数据云同步,用户登录后可以看到自己的以往跟帖记录,以及跟帖回复内容。
(10)登录用户可以绑定个人邮箱,通过未读邮件按钮点击阅读。
(11)用户可针对客户端提供的功能、体验等问题向网易官方进行反馈(相关反馈回复会在首次启动应用时从云端同步到本地数据库)。
(12)增加设置功能模块,内容包括新手引导以及系统设置等功能节点。
1.3国内外现状与发展
当前市场新闻客户端繁多,部分由传统门户网站转型产生,主流的新闻客户端为:网易、新浪、搜狐、腾讯;
目前市场上新闻客户端共有的特点:
(1)提供7*24小时即时新闻资讯。
(2)新闻种类全面,包括娱乐、体育、财经,时尚等诸多焦点方面。
(3)操作简单易用。
(4)覆盖IOS ,Android, Windows phone等主流平台。
(5)内容包含文字、图片、视频多媒体展示方式。
新闻多媒体的展现形式越来越受广大用户群体的欢迎,由传统的简单文字以及带有图片信息的新闻内容,到附有视频资源的新闻内容,用户体验一直在改善,但当前市场上的新闻应用仍然有不足之处。
主要问题体现在以下四个方面:
(1)图片新闻:大部分客户端仍然采用的是嵌入文字新闻条目的内部,或简单开启一个专栏,即:图片专栏,虽然相对以往的应用用户获取图片新闻较为方便,但不能满足用户的快速筛选需求。
(2)获取新闻资讯方式:针对繁忙的现代化生活,用户为获取新闻资讯不得不花一些时间去查阅,在阅览新闻的时候却不能同时去做其他的工作。
(3)新闻互动:随着应用市场的繁荣昌盛,用户越来越追求应用产品的品质,为新闻阅读者提供良好的用户体验一直是新闻客户端领域不断完善自己提高竞争力的主要目标,用户浏览新闻的同时会对其产生自身的认识并有表达本人看法的需求,大部分主流新闻客户端即使支持了评论功能也只是简单的留言而已,并没有针对这部分数据进行深入挖掘与利用。
(4)用户体验:针对图片,视频等多媒体资源,网络传输速度上总是影响是用户对应用品质的认可。
2基于Android平台的新闻客户端所用关键技术
本章主要介绍基于Android平台的新闻客户端设计与实现过程中所使用的关键技术。
应用使用了Android SDK和JSON数据传输格式,与服务器端的通信主要使用Volley网络通信框架,本地数据持久化方案使用SQ Lite数据库技术。
2.1 JSON数据传输格式
JSON (JavaScript Object Notation, JavaScript对象表示法)是一种轻量级的数据交换格式语言,JSON是独立于语言的文本格式,这使得JSON具备了跨平台的
特点,而当前互联网的大环境下,PC端操作系统多样化以及移动终端操作系统的日新月异都使得JSON语言越发成为主流数据交换格式。
2.2 SQ Lite数据库
作为轻量级的、嵌入式的、关系型数据库,SQ Lite目前已经在iPhone, Android等手机系统中使用,SQ Lite可移植性好、易使用、小巧高效而且可靠性高。
SQ Lite嵌入到使用它的应用程序中,它们共用相同的进程空间,而不是单独的一个进程。
从外部看,它并不像一个RDBMS,但在进程内部,它是完整的、自包含的数据库引擎。
2.3 Shared Preferences存储
Shared Preferences是Android平台上一个轻量级的存储类,主要是保存一些常用的配置,比如窗口状态,一般在Activity中窗口状态on Save Instance State的保存可以使用Shared Preferences完成。
Shared Preferences可以保存的数据类型包括long长整形、int整形、String 字符串型等。
2.4 Volley网络通信框架
Android开发团队在2013年Google I/O大会上推出了一个新的网络通信框架—Volley。
Volley是把AsyncHttpClient和Universal-Image-Loader的优点集于了一身,既可以像AsyncHttpClient一样简单地进行HTTP通信,也可以像Universal-Image-Loader一样轻松加载网络上的图片。
除了简单易用之外,Volley在性能方面也进行了大幅度的调整[[12J,它的设计目标就是非常适合去进行数据量不大,但通信频繁的网络操作,而对于大数据量的网络操作,Volley的性能并不好。
3基于Android平台的新闻客户端的需求分析
本章首先将描述新闻系统的整体功能,之后将针对本人设计开发的Android新闻客户端做详细的需求分析阐述,主要包括功能性需求与非功能性需求。
功能性需求分析中,首先会对新闻客户端的整体功能进行简单的描述,之后对本客户端所包含的7个功能模块进行详细的阐述;在非功能性分析中,将对响应时间、可扩展性、可用性三个方面进行详细说明。
3.1系统描述
新闻系统包括客户端和服务器两部分。
服务器存储新闻相关的所有内容,包括新闻文字资源、图片资源、视频资源、音频资源。
客户端需要支持Android客户端。
为实现多平台访问服务器的需求,服务器端需要采用跨平台的数据响应技术方案。
为支持新闻系统24小时不间断提供服务,服务器端采用双击热备份机制,主机与备机共享数据库资源,数据库内容存储在磁盘阵列上。
同时提供新闻编辑与抓取系统以允许新闻编辑进行新闻的采集与二次编辑。
本人实习期间主要负责Android平台的设计与实现工作,以下将针对Android新闻客户端的功能与非功能需求进行详细的阐述。
3.2新闻客户端功能性需求分析
新闻客户端功能性需求分析主要阐述了新闻客户端的功能性需求,从系统功能的角度,将该应用分为七个功能模块:新闻、订阅、跟帖、图片、投票、个人中心和设置,下面针对各功能模块分别进行功能描述。
3.2.1新闻客户端的主要功能
新闻客户端主要实现用户针对新闻资讯进行分类浏览的功能,类别包括头条、娱乐、体育、财经、科技、时尚、汽车、房产、轻松一刻、图片、游戏、北京、真话、军事、历史、聚合阅读、听新闻等。
用户可以查看任意栏目下新闻内容详情,不同的新闻展现形式也不相同,可以是文字、图片、视频或音频等多媒体资源形式;同时允许用户针对新闻内容发表个人观点(即跟帖功能),用户发表跟帖内容之前需要注册登录。
系统将根据每条新闻的跟帖热度进行排行,用户可以浏览今日的精彩跟帖并查看热门新闻。
提供跟帖功能是为了提高读者的参与度,做一个有态度的新闻资讯阅读者。
除此之外,本系统为用户提供了另一种互动方式:投票功能,用户可以针对每日的最热门的新闻表达个人观点,系统将以单选或者多选的形式让用户参与投票,投票后用户将看到具体的投票结果,各个选项以条形图的形式展示投票人数的百分比。
(6)个人中心:用户可以注册网易通行证方便以后登录新闻客户端。
个人中心将提供3个子功能,分别为注册登录、温度、搜索。
注册登录:输入用户信息登录或者填写个人信息进行账号注册。
温度:此处为用户显示近一个礼拜的所在地温度。
搜索:用户可根据输入的新闻关键字搜索本人想搜索到的新闻内容,关键字可出现在新闻标题里也可以出现在新闻的正文里。
(7)设置:设置模块实现了用户的账号管理和绑定功能,同时还可以进行简单的系统设置,如字体设置、正文字号、要闻推送开关、WI-FI下自动离线、2G/3G网络下下载图片开关、自动加载更多、重要消息气泡提醒等基本设置。
3.3系统非功能性需求分析
本客户端在完成功能需求的条件下,还需要考虑时间响应需求、可扩展性需求和易用性需求。
本节对这些需求做了简单的描述。
3.3.1新闻客户端时间响应需求
由于该客户端运行在手机终端的安卓平台上,那么对其响应用户的时间为5秒钟之内,如果超过S秒,手机终端会出现假死现象,这会降低用户体验。
为提高用户体验,要求所有用户的简单操作所消耗的处理时间在5秒之内,而耗时操作(如:服务器访问)这种也要求在10秒钟之内完成,同时不能让用户有较长的时间等待,在处理耗时请求的同时不能影响用户的其他操作,避免出现假死现象。
3.3.2新闻客户端的可扩展性需求
该客户端将会定时更新版本,不断增加新功能和完善已有功能以适应不断变化的需求,这需要本客户端具有很好的可扩展性,要求设计良好的代码以允许更多的功能在有需要的时候被加入到适当的位置中。
这样做就可以应对未来可能需要进行的修改,而造成代码被过度工程化开发。
可扩展性是软件设计的原则之一,它允许添加新功能或者完善修改已有的功能,它是软件系统拓展的能力。
3.3.3新闻客户端的易用性需求
在移动互联网领域,APP产品层出不穷,功能越来越丰富,而简捷易用始终是各个产品不变的追求。
易用性成为开发非功能性需求中必须考虑的问题,主要涉及到UI设计过程、人机互动工程、心理学、交互式设计、用户行为分析等多方面知识。
在设计产品功能的时候
需要遵守三大原则,即易见、易用、易学。
易见即各种功能不要藏的太深,用户应该很容易找到他们期望进行的各种操作;易学就是需要应用茶品可以通过简单的导航,在线帮助等各种方式保证用户可便捷掌握使用技巧;易用的重点则在让软件熟练使用后应该可以更快的进行各项操作。
4基于Android平台的新闻客户端的概要设计
本章将要针对新闻客户端的概要设计进行详细描述,按照架构设计、客户端总体架构、客户端功能模块划分、数据库设计的顺序进行设计说明。
4.1系统架构设计
新闻系统支持移动终端以及PC终端的访问,采用JSON数据传输格式,提高数据传输效率,实现跨平台的数据响应,实现一个服务器多重终端的策略。
服务器端采用双机热备机制,主机响应终端用户的请求,备机随时等待唤起工作,主机与备机的数据均存储在外部磁盘阵列,保证服务器的不间断工作模式。
4.2系统客户端总体架构
该新闻客户端采用MVC (model-view-controller,模型一视图一控制器)框架,该框架将代码分离为模型、视图、控制器三层,将代码进行解祸,将数据相关的操作集中在模型层,而与视图显示有关的内容放置在视图层,控制器的作用在于匹配模型与视图,完成用户的请求。
MVC框架如图4-2所示。
(1)模型层:本项目为客户端的各个功能模块设计相关的业务类,命名规范为模块名称加Model,如:News Model(新闻模块业务类),该业务类实现了网络数据读取与写入操作、本地数据库更新处理操作、数据加工转换操作。
(2)视图层:本项目采用XML布局文件进行界面描述,通过XMI.布局文件可以向用户展示模型层得到的数据内容,同时也可以获取用户输入为模型层处理加工数据做准备。
(3)控制层:控制层的工作主要由Activity组件承担,该组件从视图层读取数据,根据用户输入选择适当的业务类进行处理,在视图层与模型层之间起到桥梁作用。
4.3系统客户端功能模块划分
根据新闻客户端的总体需求得到7个功能相互独立的模块,分别为新闻、订阅,跟帖与分享,图片、投票、个人中心、设置。
其中新闻模块内根据栏目内容的不同具化为五种不同的页面布局。
功能模块的组织结构如图4-3所示。
4.4数据库设计
为了避免客户端频繁的与服务器进行交互从而降低性能,应用在第一次启动的时候会构建各个功能模块的数据库表结构用来缓存数据,以空间换取时间。
本客户端所使用的是一款轻型的数据库—SQ Lite。
本应用客户端共设计10张数据库表。
5基于Android平台的新闻客户端的设计与实现
本章针对需求分析阶段划分好的功能模块进行设计与实现。
5.1新闻模块的设计与实现
新闻模块一共包含26个新闻类别子栏目,其中头条、娱乐、体育、财经、科技、时尚、汽车、房产、轻松一刻、图片、游戏、本地、真话、军事、历史、聚合阅读和听新闻这13个子栏目默认显示在顶部导航栏的。
其余论坛、博客、微博、社会、电影、彩票等13个子
栏目需要用户手动添加才会显示在顶部导航栏。
用户可通过栏目管理来排序、添加或者删除所有新闻栏目。
用户有两种方式切换新闻栏目:第一种方法是手动滑屏依次进入到各个新闻栏目页;第二种方法可点击顶部导航栏,点击相应的栏目类别名称直接加载出相应的新闻列表页面。
新闻模块是主界面tab栏目的第一个显示模块,由MainNewsTabFragment实现。
新闻界面是一个viewpage样式的界面,用户可以滑动新闻栏目浏览不同栏目下的新闻,ColuxnnAdapter界面的数据源,该类需要维护一个NewsColumnHelper工具类,NewsColumnHelper工具类是用来查询新闻栏目信息、管理新闻栏目的公共类,ColumnAdapter中的数据需要依靠NewsColumnHelper来获取。
MainNewsTabFragment首先创建NewsColumnHelper对象,NewsColumnHelper初始化时需要获得本地城市信息和订阅栏目信息,首先从缓存中获取,获取成功后需要从缓存中删除,以免占用缓存空间,如果缓存为空,则开启线程从数据库more col~表中和new top columns表中重新获取己添加的新闻栏目信息,如果缓存不为空,则设置NewsColumnHelper中的成员变量mList中的值为缓存中的值,mList是ColumnAdapter的数据源,ColumnAdapter定义了布局文件以及各控件和字段属性的对应关系,mList获取完数据后调用notifyDataSetChanged}方法通知adapter数据发生改变。
ColumnAdapter重写了getFragmentItem()方法,根据传来的位置参数创建一个新的NewsListFragment,不同栏目对应不同类型的NewsListFragment,在创建之前需要判断栏目类型,主要分为以下几类:普通新闻、聚合阅读、听新闻、本地新闻、股票、汽车六类新闻,通过调用Fragment.instantiaten方法可以建立不用class。
类的fragment对象。
FragmentStatePagerAdapter继承于Fragm$ntStatePagerAdapter类,同时是ColumnAdapter 类的父类,它也是viewpage的数据源类,该类重写了setPrimaryItem方法,由于动态加载在setPrimaryItem中实现,每次滑动都会调用setPrimaryItem,客户端在此记录了滑动前后的position,并调用onPrimaryItemChanged}方法将滑动前后改变的信息传递过去,子类Columnt}dapter通过实现onPrimaryItemChanged方法可以修改界面布局、设置当前栏目为已读模式、开启异步任务ChangeUnreadCountTask重新获取未读栏目数等操作。
ChangeUnreadCountTask调用changeColumnCountO方法,该方法通过使用NewsColumnHelper
工具类判断栏目列表中的tid标识是否包含在mReadedCplumnIds已读列表中来计算未读栏目数,同时将栏目数显示在界面上。
MainBaseFragmentParent继承于BaseParentFragment,是MainNewsTabFragment的父类,封装了各个tab下的fragment(点击新闻调出的fragnnent、点击图片调出的fragment等等)的公共方法,各个tabfragment需要共享用户登录的相关信息,因此在该类中封装了与用户登录有关的业务信息,包括处理用户登录登出时,修改actionbar右上角的用户头像的显示问题。
BaseParentFragment继承于FragmentParent,是MainBaseFragmentParent的父类,与BaseFragment类的功能相似,主要是定义子类fiagment的界面布局。
FragmentParent继承于LoaderFragment<D>,是BaseParentFragment的父类,该类主要是接收封装好的FragmentInfo对象信息,调用FragmentManager对象和FragmentTransaction 对象实现子fragment的替换功能。
LoaderFragment<D>继承于android基本控件Fragment,其功能主要是进行数据获取。
5.2跟帖模块的设计与实现
跟帖模块包括精彩跟帖和今日排行两个主要的子功能。
精彩跟帖与今日排行均以Fragment控件的形式出现,分别对应Tie Top Fragment和Tie Rank Top Fragment两个类。
在跟帖模块的入口类文件Main Tie Tab Fragment中存在一个View Pager控件,该控件用于切换精彩跟帖与今日排行两部分内容。
跟帖模块的类图如图5-2
所示:
5.3图片模块的设计与实现
图片模块展示的数据是图集新闻对象,具体分为热点、独家、明星、体坛和精美五个图集专
栏。
图片模块的类图如图5-3所示。
MainPicTabFragment类:该类为图片模块的入口类文件,该类使用ViewPager控件来展示图片新闻数据。
PicHelper类:该类为图片模块的图片分类管理工具类,PIC LIST数组用于存放五类图集的字符串标题资源,getTag(int position)方法根据图集栏目所在的位置得到tag标识。
newPicListFragmentn方法用来创建对应的图片子栏目的Fragment控件。
FragmentInfo类主要用来封装Fragment的基本类信息,tab属性用来定位图集类别,class。