基于Android的新闻APP设计【毕业设计+答辩PPT+文献翻译】
收藏
资源目录
压缩包内文档预览:
编号:17899562
类型:共享资源
大小:33.01MB
格式:RAR
上传时间:2019-04-19
上传人:hon****an
认证信息
个人认证
丁**(实名认证)
江苏
IP属地:江苏
9.6
积分
- 关 键 词:
-
毕业设计+答辩PPT+文献翻译
基于Android
毕业论文设计
ppt答辩基于android
Android
基于Android的
设计+论文+
+答辩PPT+
+答辩PPT
- 资源描述:
-
基于Android的新闻APP设计【毕业设计+答辩PPT+文献翻译】,毕业设计+答辩PPT+文献翻译,基于Android,毕业论文设计,ppt答辩基于android,Android,基于Android的,设计+论文+,+答辩PPT+,+答辩PPT
- 内容简介:
-
毕业设计说明书基于Android的新闻服务APP设计基于Android的新闻服务APP设计摘 要随着全球智能手机市场的迅速发展,智能手机的操作系统之间的竞争也是越来越激烈,谷歌的Android操作系统正是其中的佼佼者,一度份额占比高达90%。由于手机的便携性和系统的友好易用,网民利用智能手机上网的比率也越来越大,已远远超越PC端。在这样的大背景下,用户们获得信息呈现出碎片化的趋势,用户通过电脑浏览新闻需要付出较大的时间成本,空间成本和硬件成本。因此,开发出一款手机新闻客户端应用将有广阔的市场前景和需求。本论文设计的是基于Android平台,开发出的一款手机新闻应用程序“维度新闻”。 用Android Studio和Eclipse作为开发工具来编写页面和逻辑实现代码,以Apache Tomcat8.0作为应用程序的服务器。该应用能够实现从网络获得最新新闻数据、能够观看视频新闻等。根据新闻浏览的要求,采用侧滑栏的布局方式和Material Design的设计语言,对新闻频道进行分类,用户可以自行选择自己感兴趣的频道,从而使界面更友好,功能更完善,拥有极好的体验。本论文是在分析Android应用开发原理的技术层面上,开发出能为用户提供更人性化、更方便的基于Android手机新闻应用。通过实践与测试,本文所述的原理和方法能够完成设计所需要的功能。关键词:Android, 新闻App, 智能手机操作系统,Tomcat,用户体验Blood Design and Realization of Android Client Based on the NewsAbstract:With the rapid development of the global smart phone market, smart phone operating system competition is more and more intense, Googles Android operating system is one of the best, once accounted for up to 90% share. As the phones portability and system friendly and easy to use, Internet users use the smart phone Internet access ratio is also growing, has far exceeded the PC side. In this context, users get information showing fragmentation trend, the user through the computer to browse the news need to pay a larger time cost, space costs and hardware costs. Therefore, the development of a mobile news client application will have a broad market prospects and needs. This paper is based on the Android platform, developed a mobile news application - Dimension News. Use Android Studio and Eclipse as a development tool to write the page and logic implementation code to Apache Tomcat 8.0 as the application server. The application can be achieved from the network to get the latest news data, to watch video news. According to the requirements of news browsing, the use of sidebar layout and Material Design design language, the news channel classification, users can choose their own channels of interest, so that the interface is more friendly, more functional, with excellent Experience. This paper is in the analysis of Android application development principles of the technical level, developed to provide users with more humane, more convenient based on Android mobile phone news applications. Through the practice and testing, the principles and methods described in this paper can complete the design of the required functions.Keywords:Android ,News Client Application ,Smartphone operating systems,Tomcat,user experience 第 1页 第70页 目 录1 绪论11.1研究内容及意义11.2 研究现状和发展趋势11.3本论文的结构安排22 系统分析与环境搭建32.1研究目标32.2可行性分析32.3需求分析52.4 性能分析62.5开发环境的搭建62.5.1 JAVA环境配置72.5.2 APACHE TOMCAT的安装72.5.3 Android Studio 2.3的下载和安装72.6 所用开源项目介绍82.6.1 Leakcanary库8简介8 使用102.6.2 XUtils框架13 XUtils简介13 添加XUtils Library到项目中14为xUtils快速开发框架添加权限142.6.3 Google-gson开源项目14简介14 添加依赖库152.6.4 Retrofit2.0网络框架15简介15 使用152.6.5 Okhttp 网络框架16简介16 添加Okhttp库到项目中162.6.6 RxJava 响应式编程框架16简介16 添加Retrofit到项目中182.6.7 Glide 图片加载缓存框架18简介18 添加Glide库到项目中182.6.8 Photoview 图片缩放框架19简介19 使用192.6.9 GreenDao ORM框架19简介19 添加到项目中202.6.10 ljkplayer视频播放库20简介20 添加Glide库到项目中202.6.11 AndroidChangeSkin 插件库21简介21 使用212.7 本章小结213 系统设计及实现223.1系统架构设计223.1.1 MVC模式223.1.2 MVP模式223.1.3 MVP模式与MVC模式的区别243.1.4 MVP模式在新闻客户端中的运用243.2系统功能设计263.2.1 浏览新闻界面的设计263.2.2 业务流程283.3 用户界面设计313.3.1 Material Design设计语言31简介31核心设计思想和规范32在维度新闻项目中的应用323.3.2 关键界面设计32 DrawerLayout 和 NavigationView实现侧滑栏设计34 CoordinatorLayout和AppBarLayout实现关于项目界面的设计36 RecyclerView 和自定义ThreePointLoadingView 实现三点加载效果393.4数据相关设计423.5功能的实现493.6本章小结544.系统测试554.1 软件的测试554.2测试与实现的结果及说明554.3测试过程中遇到的问题及解决的办法604.4本章小结605 结论615.1 本文总结615.2.工作展望62参 考 文 献63致谢64第 IV页 共IV页 1 绪论1.1研究内容及意义Android系统是目前世界上市场占有率最高的移动操作系统。全球领先的第三方全域大数据服务提供商友盟2016年Q4发布的数据报告,国内活跃设备数量已经达到11.7亿,与前一季度相比增长8.1%,年底国内活跃移动设备增幅迅速增长,移动用户群体明显攀升。随着移动端用户的增长,用户获取信息的方式也逐渐从PC网页版转变到移动客户端。而移动客户端中Android的市场占有率远大于其他系统。从友盟的统计中可以看到,新闻资讯类APP的用户留存率为26.8%,仅次于金融理财类的APP。由此可以看出用户对新闻资讯类的APP是十分需要的,由此可以看出开发一款Android平台的新闻客户端软件是非常顺应时事的。Android平台新闻客户端软件的开发可以进一步扩大时事新闻的覆盖面,让广大公众能够随时随地方便且快捷地获取最新的新闻资讯信息,了解新闻时事,本软件的广泛使用,尤其是在传授知识、普及教育方面起着非常重要的作用。“维度新闻”是一款基于Android系统,采用Java语言开发,从网络的开源新闻接口获取数据,设计出的针对使用Android手机的用户实时浏览在线新闻和视频的应用程序。1.2 研究现状和发展趋势目前市场研究机构Gartner发布了全球主要的国家智能手机2017年Q1内的销量报告,报告指出全球智能机共卖出3.8亿部,同比增长9%。而其中,谷歌Android手机市场占比高达86.5%,相比于2016年Q1季度的84.2%的占比,Android操作系统的市场份额进一步提升,苹果iOS操作系统在全球智能手机市场上均有所下滑,个别国家的降幅甚至高达10.3%。据最新统计数据显示,Android操作系统将继续领跑全球市场,包括美国、澳大利亚、中国、意大利、英国、德国、西班牙等所占的市场比例都已经超出50%,并且还将继续呈现上涨的趋势。专家预测,在2020之前Android市场份额必将达到90%。从上面的数据可以看出,Android手机应用的开发具有巨大的市场前景。基于Android系统开发的应用程序的潜在用户量也将远超其他操作系统。谷歌在2017 I/O大会上推出最新版本的Android O操作系统,其绚烂的新特性和设计理念让人看到了焕然一新的Android操作系统。Google与开放手机联盟联合开发了 Android操作系统,这个联盟由摩托罗拉、高通、宏达电、中国移动和 T-Mobile 等在内的多家无线应用和技术的领军企业组成。Google通过与设备制造商、开发商、运营商和其他有关各方结成深层次的合作关系,希望借助建立开放式、标准化的移动移动电话软件平台,在移动产业内形成一个开放性的生态系统,这将是开发Android软件的一个契机,Android平台的开发在将来必定大放异彩。1.3本论文的结构安排:第1章 绪论。介绍了要基于Android的研究意义以及国内外的研究情况,指出开发一款基于Android平台的智能新闻客户端是非常顺应时事的,并提出了本论文的主要研究内容和论文的结构安排。第2章 系统分析与环境搭建。主要内容是对本系统用到的知识及技术进行概要论述,包括系统开发语言Java概述,Android系统的概述,服务器Tomcat的概述,以及开发软件Android Studio的介绍。还有这些JDK、Tomcat、Android Studio等环境的搭建,以及所用开源项目及SDK介绍。分别阐述开发过程中所用的开源项目,这些开源项目加快了开发的速度并减少了代码量。第3章 系统设计及实现。主要内容是对系统的模块设计、系统的设计流程、系统实现的代码结构、对界面的详细分析进行阐述。深刻的阐述了智能新闻客户端的具体实现。对系统的功能需求以及对系统的业务模型进行了详细的说明。第4章 系统测试。主要内容是阐述如何对整个系统进行测试,以及测试过程中遇到的问题和解决办法。第5章 总结和展望。主要内容是对整篇论文进行总结以及对所研究的课题进行展望,描述本课题在设计上的不足以及往后的努力方向2 系统分析与环境搭建2.1研究目标(1)了解Android应用的设计和开发过程;(2)使用多种组件进行Android新闻应用的开发本款手机新闻客户端软件是采用Java语言编写,基于Android Studio和 Eclipse的开发平台,连接网络新闻数据接口,开发出了针对Android平台的新闻客户端手机应用。2.2可行性分析Java是一种跨平台的,面向对象的,性能优异的动态语言。Java语言是当今普遍使用的网络编程语言,具有很多优秀特性。特点如下:(1)简单、高效。Java语言与C类似,如果用户了解C和面向对象的概念,就可以很快编写出Java程序;此外,Java又不同于诸如C语言提供的各种各样的方法,它只提供了基本的方法,这样就减少了编程的复杂。Java语言虽然简单,却很高效,它可以用面向对象的方法来描述用户的每一个动作。(2)面向对象。Java语言是一种新的面向对象的程序设计语言,程序代码大多体现了类机制,以类的形式组织,由类来定义对象的各种行为。Java同样支持类继承,这样也减少了程序设计的复杂性。(3)跨平台性。Java语言经编译后生成与计算机硬件结构无关的字节代码(Bytecode),当Java程序在运行时,需要由一个解释程序对生成的字节代码解释执行。这体现了Java语言的跨平台性,使得Java程序可以在任何平台上运行,因此具有很强的移植性。Java跨平台原理表示如图2-1。图2-1 java跨平台原理表示图(4)交互式特性。Java是面向对象的网络编程语言,由于它支持TCPIP协议,使得用户可以通过浏览器访问到Internet上的各种动态对象。并且在网络上用户可以交互式地进行各种动作,而多线程技术的引入使得这种交互式操作更为容易。(5)多线程机制。Java语言支持多线程机制,多线程机制使得Java程序能够并行处理多项任务。Java程序可以设计成具有多个线程,例如让一个线程负责数据的检索、查寻,另一个线程与用户进行交互,这样,两个线程得以并行执行。多线程机制可以很容易地实现网络上的交互式操作。(6)动态的内存管理机制。Java语言采用了自动垃圾回收机制进行内存的管理。在Java系统中包括了一个自动垃圾回收程序,它可以自动、安全地回收不再使用的内存块,这样,程序员在编程时就无需担心内存的管理问题,从而使Java程序的编写变得简单,同时也减少了内存管理方面出错的可能性。(7)安全性。在类似Internet的这种分布式网络环境中,安全性是个不容忽视的问题。Java语言在安全性方面引入了实时内存分配及布局来防止程序员直接修改物理内存布局;通过字节代码验证器对字节代码的检验,以防止网络病毒及其它非法代码侵入。此外,Java语言还采用了许多面向对象的异常处理机制,负责对一些异常事件进行处理。以上介绍了Java语言的一些主要特点,除此之外它还具有动态性、类库丰富、高性能等特点,这些都使得Java语言在各个方面得以成熟和完善,成为大众日益青睐的程序设计语言之一。开发任何一个基于手机的应用程序,都会受到资源和时间上的成本限制。因此,在接收任何一个应用程序开发任务之前,必须根据用户可能提供的资源和时间条件进行可行性分析,旨在减少项目开发风险,避免人力、财力和物力的浪费。风险分析与可行性分析在很多方面是相互关联的,项目的风险越大,开发质量高的软件的可行性的几率就越小。经济可行性。采用的手机数据流量作为通信手段,当今通信技术的迅速发展,2G的运营商的GSM网络已被4G所取代,数据流量的资费也越来越低,而且现在手机都可连接无线Wifi, 实现数据流量0资费,大大加强了本新闻阅读软件的经济可行性。技术可行性。开发一个新闻客户端软件,用到的技术不会十分复杂,用到最多的就是客户端与服务端的数据交换。其中新闻数据源可以从网易新闻开源接口获取,服务器就是用的Tomcat去实现。而客户端则是通过Android Studio去开发,常用的就是Android中的五大组件,以及常用的开源框架,Android系统下的解析Json数据以及UI的设计,经查阅相关资料是可以实现的。2.3需求分析打开智能新闻客户端程序后会进入到主页面,可以通过相应的按钮进入不同的模块。可以在右侧上方的栏目中选择军事、财经、房产等栏目,拖拽频道即可增加到主页面中, 进行相关的新闻浏览。该系统可以进行新闻资讯的实时更新,可以通过下拉刷新从服务器获取最新消息,可分不同的栏目让使用者了解任意感兴趣的资讯进行阅读,用户能通过下拉新闻列表,便于操作。同时,左滑界面可看到新闻、视频、图片、设置四大模块。进入视频模块,可以看到热点、娱乐、搞笑等板块,用户可以浏览相关视频。从上面的描述中可以基本了解软件的功能需求: 侧滑栏界面:包括新闻、视频、图片、设置、用户可以自行选择浏览相关模块,对新闻软件进行相关设置。设置界面:包括夜间模式和侧滑返回开关以及项目介绍,采用多种布局嵌套,美化控件。 新闻界面:模仿主流新闻客户端进行UI编写。栏目界面:默认显示头条、体育、科技三大频道并不可更改,下面更多板块中包括军事,财经,足球等频道视频界面:模仿主流视频播放器进行UI编写,可以放大缩小、横屏、锁定屏幕。图片界面:可以放大缩小相关图片。2.4 性能分析从用户的角度出发,针对用户的需求,所涉及的程序响应速度快、信息处理速度快、安全性高是用户所需要的三大主要性能,另外为了受众面更广,根据友盟统计,目前的Android设备系统版本的分布情况,Android4.4+版本占到设备总量的89.5%,所以做开发的时候选择的Android系统最低版本也必须是Android4.4以上来保证用户量。2.5开发环境的搭建系统开发环境如表2-1。表2.1系统开发环境表:分类名称版本语种操作系统WindowsWindows10简体中文需求分析建模工具Visio2013简体中文开发平台AndroidStudio2.3英文数据库平台MySQL5.6.24简体中文Web应用服务器Tomcat8.x英文Web开发工具Eclipse Neon.34.6.3英文数据库管理工具SQLite ExpertSQLyogProfessional 3V11.11英文简体中文2.5.1 JAVA环境配置采用JDK的版本是JDK1.8,目前JDK版本最高的是JDK1.8,目前已经是很成熟的版本。所以采用已经稳定成熟的版本作为开发工具。从Oracle公司下载 JDK1.8之后安装,由于本机的开发系统是win10的64位操作系统,选择下载64为JDK,然后按照安装步骤一步一步next,JDK就安装完成了,然后配置环境java的环境变量,整个JDK的安装过程就完成了。 2.5.2 APACHE TOMCAT的安装从Tomcat官网下载Apache-Tomcat-8.0.35,根据系统下载相应的Tomcat版本,点击解压缩,把解压后的文件放到C盘的根目录。值得注意的是Tomcat的bit数要与JDK的一致,本机都是64位,与操作系统一致。2.5.3 Android Studio 2.3的下载和安装可以去Android Studio的官网下载。Android Studio官网的下载地址为/sdk/installing/studio.html。下载相应的Android Studio版本。另外,给大家介绍一个非常好用的镜像网站AndroidDevTools,地址为/。这里汇集了大家开发时所需要用到,但是又不容易下载到的一切资源,免去了翻墙步骤。将下载的压缩包解压到任意盘符的根路径下,然后单击解压路径下bin目录下的studio64.exe文件,32位系统运行studio.exe。首次运行会弹出对话框询问用户是否需要导入Android Studio设置,如果以前用过Android Studio且保存了定制该IDE的设置信息,则可以选择第一个单选钮,并通过下面的文件浏览框选择Android Studio设置信息的存储位置,否则选择第二个单选框。此处选择第二个单选框,然后单击“OK”按钮,系统显示Android Studio的加载界面,加载完成将会看到配置向导对话框。配置向导对话框用于引导用户从网上下载Android SDK,选“Custome”单选钮,然后单击“Finish”按钮,即可看到下载位置选择的对话框,选择好要安装的位置,单击“Finish”按钮,即可看到开始下载Android SDK的进度对话框。下载完成后单击“Finish”按钮,即可完成Android Studio的安装。2.6 所用开源项目介绍2.6.1 Leakcanary库简介Github是一个代码托管平台。作为开源代码库以及版本控制系统,Github拥有超过900万开发者用户。随着越来越多的应用程序转移到了云上,Github已经成为了管理软件开发以及发现已有代码的首选方法。而作为一个分布式的版本控制系统,在Git中并不存在主库这样的概念,每一份复制出的库都可以独立使用,任何两个库之间的不一致之处都可以进行合并。GitHub可以托管各种git库,并提供一个web界面,但与其它像 SourceForge或Google Code这样的服务不同,GitHub的独特卖点在于从另外一个项目进行分支的简易性。为一个项目贡献代码非常简单:首先点击项目站点的“fork”的按钮,然后将代码检出并将修改加入到刚才分出的代码库中,最后通过内建的“pull request”机制向项目负责人申请代码合并。“A small leak will sink a great ship”- Benjamin Franklin。Leakcanary是一个小型Android开源项目,用来检测应用的内存泄漏问题。当在你的debug构建过程中出现内存泄露时,LeakCanary将会自动展示一个通知栏。如图所示,检测到内存泄漏会在桌面显示Leaks的图标,如图2-2所示。图2-2 自动生成Leaks图标其工作流程如下:(1)RefWatcher.watch()创建一个KeyedWeakReference去检测对象。(2)接着,在后台线程,它将会检查是否有引用在不是GC触发的情况下需要被清除的。(3)如果引用引用仍然没有被清除,将会转储堆到.hprof文件到系统文件中。4.HeapAnalyzerService是在一个分离的进程中开始的,HeapAnalyzer通过使用HAHA解析heap dump。(4)由于一个特殊的引用key和定位的泄露引用,HeapAnalyzer可以在heap dump中找到KeyedWeakReference。(5)如果有一个泄露,HeapAnalyzer计算到GC Roots的最短的强引用路径,然后创建造成泄露的引用链。(6)结果在app的进程中传回到DisplayLeakService,并展示泄露的通知消息。Github地址:/square/leakcanary 使用(1)在 build.gradle 中加入引用,不同的编译使用不同的引用:dependencies debugCompile com.squareup.leakcanary:leakcanary-android:1.3releaseCompile com.squareup.leakcanary:leakcanary-android-no-op:1.3(2)在 Application 中:public class ExampleApplication extends Application /在自己的Application中添加如下代码public static RefWatcher getRefWatcher(Context context) ExampleApplication application= (ExampleApplication) context.getApplicationContext(); return application.refWatcher;private RefWatcher refWatcher;Overridepublic void onCreate() super.onCreate(); refWatcher = LeakCanary.install(this); (3)在Activity中配置:public class MainActivity extends AppCompatActivity Overrideprotected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);/在自己的应用初始Activity中加入如下两行代码 RefWatcher refWatcher = ExampleApplication.getRefWatcher(this); refWatcher.watch(this); textView = (TextView) findViewById(R.id.tv); textView.setOnClickListener(new View.OnClickListener() Override public void onClick(View v) startAsyncTask(); ); private void async() startAsyncTask(); private void startAsyncTask() reference to the outer finishes (e.g. rotation), new AsyncTask() Override protected Void doInBackground(Void. params) SystemClock.sleep(20000); return null; .execute(); (4)在AndroidMainfest.xml 中进行配置,添加如下代码 在我的维度新闻中,核心代码如下图2-3所示。图2-3 Leaks实现的核心代码2.6.2 XUtils框架 XUtils简介 xUtils包含了很多实用的Android工具类。xUtils 源于Afinal框架,对Afinal进行了大量重构,使得xUtils支持大文件上传,更全面的http请求协议支持,拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响。Github地址:/wyouflf/xUtils目前xUtils主要有四大模块:DbUtils模块:Android中的ORM框架,一行代码就可以进行增删改查。支持事务,默认关闭。可通过注解自定义表名、列名、外键、唯一性约束、NOT NULL约束、CHECK约束等(需要混淆的时候请注解表名和列名)。支持绑定外键,保存实体时外键关联实体自动保存或更新。自动加载外键关联实体,支持延时加载。支持链式表达查询,更直观的查询语义。ViewUtils模块:Android中的ioc框架,完全注解方式就可以进行UI,资源和事件绑定。新的事件绑定方式,使用混淆工具混淆后仍可正常工作。目前支持常用的20种事件绑定,参见ViewCommonEventListener类和包com.lidroid.xutils.view.annotation.event。HttpUtils模块:支持同步,异步方式的请求。支持大文件上传,上传大文件不会Out of memory。支持GET、POST、PUT、MOVE、COPY、DELETE、HEAD、OPTIONS、TRACE、CONNECT请求。下载支持301/302重定向,支持设置是否根据Content-Disposition重命名下载的文件。返回文本内容的请求(默认只启用了GET请求)支持缓存,可设置默认过期时间和针对当前请求的过期时间。BitmapUtils模块:加载bitmap的时候无需考虑bitmap加载过程中出现的oom和Android容器快速滑动时候出现的图片错位等现象。支持加载网络图片和本地图片。内存管理使用lru算法,更好的管理bitmap内存。可配置线程加载线程数量,缓存大小,缓存路径,加载显示动画等. 添加XUtils Library到项目中在build.gradle中添加依赖库: compile org.xutils:xutils:3.5.0为xUtils快速开发框架添加权限在AndroidManifest.xml声明以下权限:在activity中,先判断权限,再写功能代码2.6.3 Google-gson开源项目简介Gson is a Java library that can be used to convert Java Objects into their JSON representation. It can also be used to convert a JSON string to an equivalent Java object. Gson can work with arbitrary Java objects including pre-existing objects that you do not have source-code of.There are a few open-source projects that can convert Java objects to JSON. However, most of them require that you place Java annotations in your classes; something that you can not do if you do not have access to the source-code. Most also do not fully support the use of Java Generics. Gson considers both of these as very important design goals. Gson是一个可以将Java对象转换成Json数据的Java类库。它也可以把Json字符串转化为等价的Java对象。Github地址:/google/gson 添加依赖库先将gson-2.3.1.jar复制到项目的Libs下,然后右键单击gson-2.3.1.jar,选择add as library。至此Jar包就添加完成了。2.6.4 Retrofit2.0网络框架简介Retrofit是针对于Android/Java的、基于okHttp的、一种轻量级且安全的,并使用注解方式的网络框架,其使用注解方式,大大简化了URL的拼写形式,使用简单,结构层次分明,支持同步和异步执行,使得请求变得异常简单,调用enqueue/execute即可完成,而且更大自由度的支持我们自定义的业务逻辑。Github地址:http:/square.github.io/retrofit/ 使用首先添加依赖库compile com.squareup.retrofit2:retrofit:2.0.2compile com.squareup.retrofit2:converter-gson:2.0.2 Retrofit2是依赖okHttp请求的,okHttp有会依赖okio,查看它的META-INF-META-INFmavencom.squareup.retrofit2retrofit-pom.xml文件,导入相关依赖包,并在AndroidManifest添加访问网络的权限。 2.6.5 Okhttp 网络框架简介HTTP is the way modern applications network. Its how we exchange data & media. Doing HTTP efficiently makes your stuff load faster and saves bandwidth. OkHttp perseveres when the network is troublesome: it will silently recover from common connection problems. If your service has multiple IP addresses OkHttp will attempt alternate addresses if the first connect fails. This is necessary for IPv4+IPv6 and for services hosted in redundant data centers. OkHttp initiates new connections with modern TLS features (SNI, ALPN), and falls back to TLS 1.0 if the handshake fails.OkHttp是目前安卓端最火热的HTTP网络框架,是一款优秀的高性能、轻量级的框架,它支持get请求和post请求,支持基于Http的文件上传和下载,支持加载图片,支持下载文件透明的GZIP压缩,支持响应缓存避免重复的网络请求,支持使用连接池来降低响应延迟问题。目前在Google在 Android6.0 的SDK中已经去掉了HttpCient ,所以OkHttp 就开始成为主流。OkHttp主要类:OkHttpClient.java、Request.java、Call.java、RequestBody.java、Response.java。OkHttp官网地址:http:/square.github.io/okhttp/OkHttp GitHub地址:/square/okhttp 添加Okhttp库到项目中在build.gradle中添加compile com.squareup.okhttp3:okhttp:3.5.0 ,同步项目即可使用。2.6.6 RxJava 响应式编程框架简介RxJava is a Java VM implementation of Reactive Extensions: a library for composing asynchronous and event-based programs by using observable sequences.It extends the observer pattern to support sequences of data/events and adds operators that allow you to compose sequences together declaratively while abstracting away concerns about things like low-level threading, synchronization, thread-safety and concurrent data structures.RxJava是一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库,是一个在复杂调度下用来实现异步操作的及其简洁的库。RxJava 的异步实现,是通过一种扩展的观察者模式来实现的。OnClickListener 的模式大致如图2-4。把这张图中的概念抽象出来,由专用的观察者模式(例如只用于监听控件点击)转变成了通用的观察者模式,如图2-5。RxJava 作为一个工具库,使用的就是通用形式的观察者模式。原理大致如图2-6。图2-4 OnClickListener模式图2-5 通用的观察者模式图2-6 通用的观察者模式Observable和 Observer 通过 subscribe() 方法实现订阅关系,从而 Observable 可以在需要的时候发出事件来通知 Observer与传统观察者模式不同, RxJava 的事件回调方法除了普通事件 onNext()之外,还定义了两个特殊的事件:onCompleted()和onError()。在一个正确运行的事件序列中, onCompleted() 和 onError() 有且只有一个,并且是事件序列中的最后一个。需要注意的是,onCompleted() 和 onError() 二者也是互斥的,在队列中调用了其中一个,就不应该再调用另一个。 添加Retrofit到项目中在build.gradle中添加依赖:compile io.reactivex:rxjava:1.0.14compile io.reactivex:rxandroid:1.0.1 2.6.7 Glide 图片加载缓存框架简介Glide is a fast and efficient open source media management and image loading framework for Android that wraps media decoding, memory and disk caching, and resource pooling into a simple and easy to use interface.Glide是Google推荐的一套快速高效的图片加载框架,作者是bumptech,功能强大且使用方便,与其他的图片加载框架不同的是,Glide支持GIF的加载与解码,可以从多个源去加载和显示图片,同时也兼顾缓存和在做图片处理的时候维持一个低内存消耗。Github地址:/bumptech/glide 添加Glide库到项目中(1)在build.gradle中添加依赖:compile com.github.bumptech.glide:glide:3.7.0 这需要support-v4库的支持,如果你的项目没有support-v4库,还需要添加support-v4依赖:compile com.android.support:support-v4:23.3.0 (2)然后配置混淆规则:-keep public class * implements com.bumptech.glide.module.GlideModule-keeppublicenum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$* $VALUES;public *; 其中第一个混淆规则表明不混淆所有的GlideModule。如果需要的话,还需添加相应的权限:2.6.8 Photoview 图片缩放框架简介PhotoView aims to help produce an easily usable implementation of a zooming Android ImageView.PhotoView 是一款扩展自Android ImageView ,支持通过单点/多点触摸来进行图片缩放的智能控件。支持即时缩放图片,支持平滑滚动,在滑动父控件的情况下能够运行良好,并且它能够和ViewPager等完美兼容。矩阵变化等有回调,方便前台其他展示的改变,单击、长按都有回调提醒,十分实用。Github地址:/chrisbanes/PhotoView 使用在build.gradle中添加依赖com.github.chrisbanes:PhotoView:latest.release.here2.6.9 GreenDao ORM框架简介GreenDAO is a light & fast ORM for Android that maps objects to SQLite databases. Being highly optimized for Android, greenDAO offers great performance and consumes minimal memory.GreenDAO应该算是当前最火的数据库开源框架,它是一个轻量快速的移动开发的ORM(object / relational mapping)框架。 GreenDAO 性能远远高于同类的 ORMLite,支持 protocol buffer(protobuf) 协议数据的直接存储,如果你通过 protobuf 协议与服务器交互,将不需要任何的映射。与 ORMLite 等使用注解方式的 ORM 框架不同,GreenDAO 使用Code generation的方式。 Github地址:/greenrobot/greenDAO官方网站:/ 添加到项目中在build.gradle中添加依赖:compile org.greenrobot:greendao:3.0.1 compile org.greenrobot:greendao-generator:3.0.0 2.6.10 ljkplayer视频播放库简介Ijkplayer 是Bilibili发布的基于 FFplay 的轻量级 Android/iOS 视频播放器。实现了跨平台功能,API 易于集成;编译配置可裁剪,方便控制安装包大小;支持硬件加速解码,更加省电;提供 Android 平台下应用弹幕集成的解决方案,支持 MediaCodec, VideoToolbox,支持 RTMP/HTTP/HTTPS 视频流播放,支持本地视频播放。Github地址:/Bilibili/ijkplayer 添加Glide库到项目中在gradle中添加直接引入依赖: compile tv.danmaku.ijk.media:ijkplayer-java:0.6.1 compile tv.danmaku.ijk.media:ijkplayer-armv7a:0.6.1 # Other ABIs: optional compile tv.danmaku.ijk.media:ijkplayer-armv5:0.6.1 compile tv.danmaku.ijk.media:ijkplayer-arm64:0.6.1 compile tv.danmaku.ijk.media:ijkplayer-x86:0.6.1 compile tv.danmaku.ijk.media:ijkplayer-x86_64:0.6.1 # ExoPlayer as IMediaPlayer: optional, experimental compile tv.danmaku.ijk.media:ijkplayer-exo:.11 AndroidChangeSkin 插件库简介这是一种完全无侵入的换肤方式,支持插件式和应用内,无需重启Activity。支持插件或者应用内多套皮肤,支持动态生成addView。Github地址:/hongyangAndroid/AndroidChangeSkin 使用在gradle中添加直接引入依赖:compile com.zhy:changeskin: 本章小结本章首先介绍了对整个Android系统的分析、新闻客户端的需求的分析、可行性的分析。然后介绍了Android智能新闻客户端系统开发所要搭建的环境,JDK,Tomcat,Android Studio。最后对智能新闻客户端开发过程中要用到的开源项目或开源框架Rxjava、XUtils、PhotoView、OkHttp等进行了阐述,并且对开源项目的使用也进行了具体说明,并且对开发过程中用到的第三方SDK进行了介绍和说明,本章还介绍了它们的功能和环境配置。3 系统设计及实现 3.1系统架构设计3.1.1 MVC模式MVC(Model-View-Controller,模型-视图-控制器)模式是80年代出现的一种软件设计模式,它把一个应用的输入、处理、输出流程按照Model、View、Controller的方式进行分离。这样一个应用就被分成三个层,即模型层、视图层、控制层。数据模型(Model)封装的是数据源和所有基于对这些数据的操作。在一个组件中,Model往往表示组件的状态和操作状态的方法。视图(View)封装的是对数据源Model的一种显示。一个模型可以由多个视图,而一个视图理论上也可以同不同的模型关联起来。控制器(Controller)封装的是外界作用于模型的操作。通常,这些操作会转发到模型上,并调用模型中相应的一个或者多个方法。一般Controller在Model和View之间起到了沟通的作用,处理用户在View上的输入,并转发给Model。这样Model和View两者之间可以做到松散耦合,而由Controller连接起这两个部分。采用MVC模式的应用,一方面,方便分离数据和其表示,使得添加或者删除一个用户数据变得很容易,甚至可以在程序执行时动态的进行。Model和View能够单独的开发,增加了程序了可维护性,可扩展性,并使测试变得更为容易。另一方面,将控制逻辑和表现界面分离,允许程序能够在运行时根据工作流、用户习惯或者模型状态来动态选择不同的用户界面。因此,MVC模式广泛用于Web程序、GUI程序的架构。3.1.2 MVP模式MVP(Model-View-Presenter,模型-视图-表示器)模式则是由IBM开发出来的一个针对C+和Java的编程模型,出现于2000年后,随着UI创建技术的功能日益增强,UI层也履行着越来越多的职责。为了更好地细分视图(View)与模型(Model)的功能,让View专注于处理数 据的可视化以及与用户的交互,同时让Model只关系数据的处理,基于MVC概念的MVP(Model-View-Presenter)模式应运而生。MVP模式架构图如图3-1。在MVP模式里通常包含4个要素:(1)View:负责绘制UI元素、与用户进行交互(在Android中体现为Activity)。(2)View interface:需要View实现的接口,View通过View interface与Presenter进行交互,降低耦合,方便进行单元测试。(3)Model:负责存储、检索、操纵数据。(4)Presenter:作为View与Model交互的中间纽带,处理与用户交互的负责逻辑。在Android开发中,Activity并不是一个标准的MVC模式中的Controller,它的首要职责是加载应用的布局和初始化用户界面,并接受并处理来自用户的操作请求,进而作出响应。随着界面及其逻辑的复杂度不断提升,Activity类的职责不断增加,以致变得庞大臃肿。当我们将其中复杂的逻辑处理移至另外的一个类(Presneter)中时,Activity其实就是MVP模式中 View,它负责UI元素的初始化,建立UI元素与Presenter的关联(Listener之类),同时自己也会处理一些简单的逻辑(复杂的逻辑交由 Presenter处理)。在MVP模式中,处理复杂逻辑的 Presenter是通过interface与View(Activity)进行交互的,因而我们可以通过自定义类实现这个 interface来模拟Activity的行为对Presenter进行单元测试,省去了大量的部署及测试的时间。采用MVP模式开发Android客户端软件,能够降低耦合度,实现了Model和View真正的完全分离,可以修改View而不影响Modle,利于驱动程序的开发,同时可以对view进行组件化,而且结构清晰,代码也更加灵活,健壮稳定。 图3-1 MVP模式架构图3.1.3 MVP模式与MVC模式的区别采用MVP模式开发,View不直接与Model交互,而是通过与Presenter交互来与Model间接交互。Presenter与View的交互是通过接口来进行的,更有利于添加单元测试,通常View与Presenter是一一对应的,但复杂的View可能绑定多个Presenter来处理逻辑。3.1.4 MVP模式在新闻客户端中的运用在我的“维度新闻”四大模块的编码实现过程中,以“新闻”模块为例,新闻版块包括“新闻主页”、“新闻详情”、“频道管理”、“新闻列表四大界面”。(1)首先从网易新闻Api接口查看返回的新闻数据类型,设计新闻Bean,用来封装联网解析到的新闻信息,这里我们设计了NeteastNewsDetail,NeteastNewsSummary,NewsChannel来封装相关新闻信息,如图3-2。图3-2 封装新闻信息的bean(2)针对新闻四大界面,我们来设计View接口,分别是新闻频道管理视图接口、新闻详情视图接口、新闻列表视图接口以及新闻视图接口。根据需求,我们需要对每个界面上的控件进行读写操作,由此定义这四大接口,如下图3-3。图3-3 新闻信息的View接口(3)对四大界面的一些逻辑操作的,我们来定义其相对应的model层接口以及实现的业务方法。“频道管理”界面,需要对频道实现增删排序,拖拽时更新数据库,由此定义INewsChannelInteractor接口及其实现INewsChannelInteractorImpl,其他三个界面也是同样的定义,如下图3-4。图3-4 新闻信息的model层(4)然后设计presenter层,它在取model层的数据之后构建view层,也可以收到view层UI上的反馈命令后分发处理逻辑,交给model层做业务操作。比如用户在“频道管理”栏目,选择栏目的时候,相对应的Activity会初始化界面并实例化相对应的INewsChannelPresenter的引用及实现的接口,监听界面动作。用户拖拽频道时,在callback中会接收到点击事件,通过INewsChannelPresenter显示拖拽界面,并把逻辑交给model层处理,更新数据库中的频道列表。Presenter层如图3-5所示。图3-5 新闻信息的presenner层(5)最后写四大界面的activity及实现拖拽逻辑的adpter适配器,activity显示相应view界面即可,如图3-6。图3-6 新闻信息的View层3.2系统功能设计3.2.1 浏览新闻界面的设计侧滑栏的设计是为了更加方便用户的操作,极大地改善了用户的操作体验。而为了更加快捷方便该系统的升级迭代,我们定义了menu.xml来存储侧滑栏列表的数据。要实现的界面如下图3-7所示,menu.xml中核心代码如图3-8所示 图3-7 侧滑栏列表 图3-9 新闻主页面图3-8 menu菜单定义本章将从系统管理的各个功能的需求进行分析,说明程序开发过程分析。为软件分为了两大部分,分别是新闻客户端模块和服务器模块。3.2.2 业务流程打开智能新闻客户端进入到新闻主页面,开始浏览新闻如图3-9所示。下拉界面从服务器中获取最新的新闻信息,下拉刷新界面如图3-10所示。点击新闻条目,可以进入新闻详情页面浏览新闻,如下图3-11所示。点击新闻条目界面右上角按钮可以选择频道,频道界面如图3-12所示。左侧侧滑可以选择模块,如下图3-13。 图3-10 下拉刷新界面展示 图3-11 新闻详情页面图3-12 新闻分享界面 图3-13 侧滑界面选择视频模块,进入浏览视频条目,如下图3-14,3-15。选择设置模块,可进入设置夜间模式和侧滑返回,如图3-16,3-17。最后是项目及致谢信息,如图3-18。图3-14视频新闻界面 图3-15 播放视频界面图3-16设置间模式界面 图3-17侧滑返回界面图3-18 项目及致谢信息3.3 用户界面设计3.3.1 Material Design设计语言简介Material-UI came about from our love of React and Googles Material Design. Were currently using it on a project at Call-Em-All and plan on adding to it and making it better in the coming months.Material Design.(材料设计语言),是由Google在2014年IO大会上推出的一种全新的视觉设计语言,旨在创造一种独一无二的底层系统,在这个系统的基础之上,构建跨平台和超越设备尺寸的统一体验。它遵循基本的移动设计定则,同时支持触摸、语音、鼠标、键盘等输入方式。Material design是最重视跨平台体验的一套设计语言。由于规范严格细致,保证它在各个平台使用体验高度一致。Github地址:/callemall/material-ui核心设计思想和规范Material Design的核心思想,就是把物理世界的体验带进屏幕,去掉现实中的杂质和随机性,保留其最原始纯净的形态、空间关系、变化与过渡,配合虚拟世界的灵活特性,还原最贴近真实的体验,达到简洁与直观的效果。在Material design中,最重要的信息载体就是魔法纸片。纸片层叠、合并、分离,拥有现实中的厚度、惯性和反馈,同时拥有液体的一些特性,能够自由伸展变形。Material design还引入了z轴的概念,z轴垂直于屏幕,用来表现元素的层叠关系。Material design非常重视动画效果,它反复强调:动画不只是装饰,它有含义,能表达元素、界面之间的关系,具备功能上的作用。Material design提倡颜色不宜过多。应选取一种主色、一种辅助色(非必需),在此基础上进行明度、饱和度变化,构成配色方案。在图标上,建议模仿现实中的折纸效果,通过扁平色彩表现空间和光影。设计小图标时,使用最简练的图形来表达,图形不要带空间感。Material Design 发布几年年以来,它的颜色更鲜艳,动画效果更突出。现在很多App的设计,都会考虑到这一元素,相信未来应该会成为一种趋势。在维度新闻项目中的应用首先在build.gradle中引入Design包compile com.android.support:design:24.2.1其他参见下文3.3.2界面设计。3.3.2 关键界面设计根据需求分析可知, 应用程序应包含三个主要的用户界面,这里要进一步分析每个用户界面中应该包括哪些显示内容。在“侧边栏页面”中,此页面展示了维度新闻的各大功能模块、有新闻、图片、视频、设置,以及用户中心几大模块,点击相应模块可以进入查看相关信息。在“新闻主页面”中,需要显示得是各类新闻的的板块,然后在选择板块时选择相应的新闻资讯信息显示在当前的栏目头下,资讯信息以一个RecyclerView的形式展示在界面上,用户可拖动获得内容,并在滑到最后一个内容时继续刷新的图片提示,用户滑动停止之后可以获得更多内容。用户可以下拉刷新以获取服务器上最新的新闻。在“详细新闻页面”中,用户在点击了一条新闻之后,可以进入详细新闻界面,在界面中会展示当前所点击新闻的标题、新闻图片、发表时间、新闻来源、,在右上角区域有查看图片的按钮,点击可查看更多新闻图片。在“视频”中,此页面展示的相关的视频新闻,根据类别有热点、娱乐、搞笑和精品四大板块,预览效果和新闻相同,点击视频条目可以进入播放视频的界面。这些视频资源都是从服务器实时更新的。点击相应的类别,回调到相应的界面。在“视频播放界面”,有旋转屏幕、锁定屏幕、裁剪视频尺寸、快进、快退、暂停等选项,用户可以直接拖拽视频播放进度条,实现视频快进快退,进度条缓冲有相应的动画效果。左边上滑屏幕可以调整亮度,右边上滑屏幕可以调节音量大小。在“侧边栏页面”中,此页面展示的信息就比较简单了,根据类别有新闻、专题、组图和互动,这些都是从服务器实时更新的。点击相应的类别,回调到相应的界面。在“侧边栏页面”中,此页面展示的信息就比较简单了,根据类别有新闻、专题、组图和互动,这些都是从服务器实时更新的。点击相应的类别,回调到相应的界面。 DrawerLayout 和 NavigationView实现侧滑栏设计图3-19侧滑栏设计图Android Material Design Library 推出了很长时间,越来越多的APP使用了符合Library 包的控件,DrawerLayout绝对是热门之一,Material Design定义了一个抽屉导航应该有何种外观和感受,统一了侧滑菜单和样式。在Android原生手机上对DrawerLayout+NavigationView更是使用到了极致,如Gmail、Google Map等。如上图3-19侧滑栏界面,当我们手指在屏幕左侧边缘向右滑动时候,就会有一个抽屉式的菜单从左边弹出,并且是“悬浮”在主界面之上的,合理的利用了设备上有限的空间,这是谷歌在Android的后期版本中添加了DrawerLayout来实现SlidingMenu同样功能的组件。首先我们定义一个navagation_header.xml,相对布局完成“个人中心”这部分的设计,之后再定义一个include_navagation_view.xml,完成侧栏条目内容填充,然后在menu_navagation.xml中中定义填充条目。关键代码依次如下图3-20、图3-21、图3-22。图3-20 navagation_header.xml图3-21 include_navagation_view.xml图3-22 menu_navagation.xml CoordinatorLayout和AppBarLayout实现关于项目界面的设计在新的Android Support Library里面,新增了CoordinatorLayout, AppBarLayout等.实现的效果: 向下滚动RecylerView,Tab会被隐藏,向上滚动RecylerView,Tab恢复出现。这么做的好处在于,用户能有更多的空间位置去看列表里面的内容。AppBarLayout继承自LinearLayout,布局方向为垂直方向。所以你可以把它当成垂直布局的LinearLayout来使用。AppBarLayout是在LinearLayou上加了一些材料设计的概念,它可以让你定制当某个可滚动View的滚动手势发生变化时,其内部的子View实现何种动作。在本项目的 “关于项目”界面,用户在上滑界面的时候。可以看到上方的图片直接隐藏起来,从而实现了toolbar折叠效果。首先依然需要引入相关包 compile com.android.support:design:22.2.0,然后定义一个activity_abount.xml.xml ,在CoordinatorLayout中嵌套一个AppBarLayout 和 NestedScrollView,Toolbar,核心代码如下: 引入的activity_about_content.xml就是折叠toolbar之后的页面布局,核心代码如下图3-23。图3-23 activity_about_content.xml在“新闻详情”和“新闻首页”页面也是同样的布局原理来实现的,不再一一赘述。 RecyclerView 和自定义ThreePointLoadingView 实现三点加载效果RecyclerView 是Android L版本中新添加的一个用来取代ListView的SDK,它的灵活性与可替代性比listview更好。RecyclerView与ListView原理是类似的:都是仅仅维护少量的View并且可以展示大量的数据集。自定义控件ThreePointLoadingView实现的三点加载的效果灵感来源于UC浏览器,是一种动态加载效果。在此项目中,对于新闻数据、新闻频道、图片数据、视频数据的展示,我们采用了RecyclerView和ThreePointLoadingView的设计。以频道页面设计为例,核心代码如下: 其他界面设计用到的控件和技术和以上三种基本相同,不再一一赘述。3.4数据相关设计 本软件是一个需要存储很多新闻资讯信息的程序,其中包括新闻的内容和标题,这些数据有一部分是从网上开源接口获取的,比如新闻数据,视频数据等,还有一部分数据需要从自己的服务器端获取,所以需要使用数据库。在客户端,用户联网刷新新闻等获取的数据,缓存到本地。由于新闻数据太大,我们直接解析好网上的新闻信息,封装到bean中,保存到手机本地文件夹内。对于用于选择的频道信息则保存到本地数据库SQLite表中。用户后台,登录信息是直接提交到服务器端进行验证或保存。在本地的SQLite数据库,我们设计了1张表和5个相关的Javabean,分别封装新闻列表信息、新闻详情信息、视频列表信息、新闻频道信息、图片列表信息、图片详情信息,以及天气信息。用户选择频道之后,会保存频道信息到“NewsChannel”表中,下次用户再次启动app时会读取表中的频道信息,表的设计如下表3-1。表3.1 NewsChannel表属性mNamemFixedmIdmTypemIndex数据类型StringbooleanStringStringInt在上表中,从左到右依次表示频道名称、频道是否固定、新闻的id,新闻类型、以及其在界面中的显示位置。在ADM中,我们可以清楚的看到,app数据文件夹下生成了NewsChannel表,如下图3-1。图3-1 app自动生成的数据库文件其他从网易新闻开源接口获取到的Jason格式的新闻信息,示例如下图3-2。图3-2 Jason新闻数据格式详情我们只需要显示其中的一部分信息,所以设计的表格如下表3-2。表3-2 NewsChannelDetail表属性bodyreplyCountdigestdkeysecdocid数据类型StringintStringStringStringString新闻及其图片信息缓存到本地/data/data/com.jokerjohn.ounews.debug/cache文件夹内。其他新闻列表页、视频列表页等数据的显示,都是拿到了网上传回来的Jason数据,进行解析,封装所需要显示的信息,通过retrofitManager的缓存策略,缓存到本地保存起来。有效缓存期为2天,用户下一次进入app中,在30秒内,先读取缓存的新闻信息显示到界面上,刷新网络有新的新闻便刷新新闻列表并清空旧的新闻信息。核心代码见附录。在用户模块,我们只是简单的做了一个用户登录的验证,以便打通前后台,服务器用的Tomcat8.0,搭的本地服务器,我们写了一个简单的web应用。用户在维度新闻客户端点击个人中心,便可进入登录界面进行登录。登陆成功之后服务器控制台会打印出用户名和密码,如图所示即登陆成功:在服务器端我们写的核心代码如下:(1)采用post和get两种方式登录的jsp页面:base href=My JSP index.jsp starting pagefunction checkit() var theForm; theForm=document.userform; if(theForm.username.value=) alert(用户名不能为空!); theForm.username.focus(); return false; if(theForm.pwd.value=) alert(密码不能为空!); theForm.pwd.focus(); return false; theForm.submit();form name=userform method=postaction=/servlet/LoginServletPOST方式用户名密码form name=userform method=getaction=/servlet/LoginServletGET方式用户名密码后台处理的servlet界面核心代码:String username = request.getParameter(username);String pwd = request.getParameter(pwd);System.out.println(username: + username);System.out.println(password: + pwd);if (username != null & !.equals(username) & pwd != null & !.equals(pwd) if (username.equals(root) & pwd.equals(123) response.getOutputStream().write(成功.getBytes(utf-8); / gbk编码 else response.getOutputStream().write(失败.getBytes(utf-8); else response.getOutputStream().write(login fail; username or password is null.getBytes();仔细分析不难得出,后台服务是整个应用程序的核心,主要是“用户登录”,用户进行点击操作,后台服务接收用户的指令,在服务器端进行验证,然后返回信息给客户端,使用户成功登录,满足客户的需求。由于时间问题,服务器端未进行复杂的功能设计,比如用户注册,用户权限管理,用户浏览记录,用户收藏等,这些功能将在后期迭代更新的版本中上线。在完成用户界面设计、服务器设计和数据库设计后,至此软件的框架设计阶段基本完成。3.5功能的实现(1)客户端Android Studio开发部分。在程序的开发阶段,首先确定“维度新闻”的工程名为“weiduNews”,据程序模块设计的内容,建立“weiduNews”工程,然后分析完成功能所需要的代码结构,认真完善,做好每一个功能。其工程源代码的结构与作用如下图3-3所示。图 3-3“weiduNews”工程的源代码文件结构为了使源代码文件的结构更清晰,weiduNews工程设置了多个命名空间,其包的作用分别展示在下表3-3。表3-3 “weiduNews”工程的主要文件用途说明表包名所含文件文件用途说明beanNeteastNewsDetail、NeteastNewsSummary、NeteastVideoSummary、NewsChannel、SinaPhotoDetail、SinaPhotoList、WeatherInfo实体对象类,封装从网上获取的新闻信息,图片信息和视频信息baseBaseFragmentt、BaseActivity、FragmentAdapter、BasePresenter、BasePresenterBasePresenterImpl、BaseRecyclerAdapter、BaseRecyclerViewHolder、BaseSchedulerTransformer、BaseSpacesItemDecoration、BaseSubscriber、BaseView、OnTabSelectedListenerAdapter整个客户端主要分成视图显示和数据处理控制,重构代码之后定义了几个基类。视图基类,Activity基类,Fragment基类及装载Fragment的适配器,代理的基类及其实现,RecyclerView,还定义了一个默认的线程模型,在 io 线程发起 request,在主线程处理 response通用适配器。RecyclerView分隔设置。把回调各个方法统一处理,并且这里对返回错误做了统一处理。callbackOnEmptyClickListener、OnItemClickAdapter、OnItemClickListener、OnLoadMoreListener、RequestCallback、SimpleItemTouchHelperCallback定义了一些监听器接口以及回调基类。比如网络请求监听基类和RecyclerView拖拽滑动的回调包名所含文件文件用途说明httpRetrofitManager、Api、HostTypeRetrofit请求管理类来配置缓存策略,网络请求接口及请求数据host类型Utislljkplayer、BitmapUtil、ClickUtils、GlideCircleTransform、GlideUtils、RxBus、MeasureUtil等等工具类,缓存工具类和图片工具类,视频播放工具类等等Modelnews、video、photos、settings、user主要模块,里面包含MVP架构实现的各模块的视图及其逻辑数据处理等WidgetHackyViewPager、ThreePointLoadingView、DiamondRefreshHead、PacManRefreshHead、RefreshHead、RefreshLayout、SimpleButton、一些自定义的控件及动画。例如三点加载动画,吃豆人特效,下拉刷新的布局等annotationActivityFragmentInjectActivity、Fragment初始化的用到的注解appActivityHelper、App、AppManager、Leakcanary的实现类监控内存泄漏,以及管理activity栈,实现管理主页面几个导航Activity的排序JniLibsarm64-v8a、armeabi、armeabi-v7a、x86、JNI 是本地编程接口,它编写的应用程序和库进行交互操作。这里是不同架构的硬件设备上播放视频的驱动库Android中资源文件都保存在/res的子目录中。其中,/res/drawable/目录中下保存的是图像文件,/res/values目录中保存的是自定义的字符串和颜色的文件以及样式文件,/res/xml目录中保存的是xml格式的数据文件,/res/layout目录下保存的是UI的布局文件。/res/anim目录下包含的是所有的动画控制文件。程序开发阶段可以被调用的所有资源都保存在这些目录中,具体的资源文件如图3-4。图3-4 Android资源文件图(2)服务器端Eclipse开发部分。服务器端工程如下图3-5。服务器端写好了用户头像上传的代码,客户端尚未实现,将在后期版本更新中加入。 图3-5 服务器端资源目录3.6本章小结主要内容是对系统的模块设计、系统的设计流程、系统实现的代码结构、对界面的详细分析进行阐述。深刻的阐述了智能新闻客户端的具体实现。对系统的功能需求以及对系统的业务模型进行了详细的说明。第 65页 共64页 4.系统测试4.1 软件的测试软件测试的目的,第一个是确认Android“维度新闻”应用能否正确运行,其一个方面就是确认软件是否完成了之前设计的功能。第二个是提供回馈信息,比如提供给我信息,看看在开发的哪些流程上面能够精简和优化。第三个是测试不仅是在测试这个新闻应用的本身,而且还包括了整个的开发过程。如果在这个新闻客户端开发完成后出现了很多问题,那就说明了开发的过程设计还存在漏洞,
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。