基于Android平台的Rss阅读器的设计与开发_第1页
基于Android平台的Rss阅读器的设计与开发_第2页
基于Android平台的Rss阅读器的设计与开发_第3页
基于Android平台的Rss阅读器的设计与开发_第4页
基于Android平台的Rss阅读器的设计与开发_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于android平台的rss阅读器的设计与开发摘要:随着3g时代的到来,移动用户通过gprs可以高速享受intenet提供的服务。本软件通过rss站点方便用户迅速获取感兴趣的内容。本论文采用android开源系统技术,利用java语言和eclipse,结合目前使用广泛的rss(really simple syndication),以及目前广泛使用的html文件解析和分析工具htmlparser对rss阅读器进行编写。使用htmlparse解析html文件来获取指定内容能节省gprs流量。本软件利用android提供的各种组件对界面进行设计,达到很好的用户体验。关键词:android;rss;

2、htmlparser;html;阅读器目 录第一章 绪论41.1课题的研究意义41.2相近研究课题的特点及优缺点分析41.3本文的主要工作5第二章 android的架构分析52.1 android特征52.2 android架构62.2.1 关键应用程序72.2.2 应用程序框架72.2.3 c/c+函数库72.2.4 java程序运行环境72.2.5 linux内核72.3 android应用的构成和工作机制72.3.1 activity82.3.2 intent receiver92.3.3 service92.3.4 content provider102.3.5 rss解析剖析102.

3、4 本章小结11第三章 开发环境介绍及构建11第四章 需求分析124.1功能需求124.2性能需求154.3数据需求164.4安全需求16第五章 android数据库的设计165.1 数据库及字段属性设计175.2数据库的连接175.2.1数据库创建175.2.2 数据库操作18第六章 系统设计与实现186.1 rss资源的收集和分析186.2 系统界面的设计226.2.1 主界面的实现226.2.2主界面中子界面的实现236.3 资源文件的解析276.3.1本地xml文件的解析276.3.2网络文件解析286.4 数据存储316.4.1 sharedperference316.4.2 fil

4、e存储方式316.4.3 sqlitedatabase数据库316.4.4 android中application的应用316.4.5数据存储在项目中的应用326.5 内容界面功能的实现32第七章 结论33参 考 文 献34第一章 绪论1.1 课题的研究意义随着移动通信的发展以及互联网向移动终端的普及,网络和用户对移动终端的要求越来越高,3g时代的到来为移动终端用户带来了更快的数据传输速率。随着3g网络的使用,移动终端不再仅是通讯网络的终端,还将成为互联网的终端。随着3g时代的到来,手机上网越来越方便,而网上充斥着各种各样的信息,让网民们很头疼,很难找到自己感兴趣的新闻,而且中国手机流量费用的

5、高昂,在众多网页中寻找自己感兴趣的信息浪费了过多没必要损失的流量。rss为网民提供新闻标题和摘要,它的作用就像一道筛子,为网民过滤了网站的大量“无用”信息,节省大量的流量,使网民直达自己所需的网页。网民可通过rss阅读器进行阅读,而不必每次到目标网站去寻找最新信息。提供rss服务的网站,可以节省用户访问目标网站的时间。便捷和主动传递,这正是rss订阅最有价值的地方。1.2 相近研究课题的特点及优缺点分析rss阅读器按照其运行环境基本可以分为三类。 第一类大多数阅读器是运行在计算机桌面上的,通过所订阅网站的新闻供应,可自动、定时地更新新闻标题。在该类阅读器中,有awasu、feeddemon和r

6、ssreader这三款流行的阅读器,都提供免费试用版和付费高级版。国内最近也推出了几款rss阅读器:周博通,看天下,博阅。第二类新闻阅读器通常是内嵌于已在计算机中运行的应用程序中。例如,newsgator内嵌在微软的outlook中,所订阅的新闻标题位于outlook的收件箱文件夹中。另外,pluck内嵌在internet explorer浏览器中。第三类则是在线的web rss阅读器,其优势在于不需要安装任何软件就可以获得rss阅读的便利,并且可以保存阅读状态,推荐和收藏自己感兴趣的文章。这些rss阅读器都是基于pc机的,而基于android平台的rss阅读器现在还是很少并且这些rss阅读器

7、基本都是解析rss feed后,获取到内容的链接后启动android中的浏览器应用进行跳转,这样浏览器根据链接下载对应的内容,页面中相应的一些内容和图片对与用户来说并没有什么实际的用处,永不并不希望看到这些无关的内容,这些无关的内容相应的也浪费了很多gprs流量,而中国目前gprs流量的价格还是比较高,这样无疑给用户造成了很到的损失。1.3 本文的主要工作本文首先给出了系统的研究背景,对当前rss的发展现状做了简单的介绍。进而详细的分析了android的特征、架构以及android应用的构成和工作机制。本文详细的提出了软件的架构,以及解析rss方案;采用java开源的jar包对html文件进行

8、分析和获取图片和文字信息;对各个界面的布局和实现方式进行详细说明;对数据库设计模块进行了详尽的需求分析,经分析得到数据库设计模块,它主要完成用户对已经获取的内容的存储,删除和查询操作;运用android提供的各种组件设计和实现很好的ui效果,实现很好的用户体验;详细介绍了该软件的性能优化。第二章 android的架构分析android是一个移动设备的软件平台,是由linux+java构成的开源软件,它提供包括sdk、key apps、middleware、linux kernel四个部分在内的全套手机软件方案。它开放了基于linux内核以上的开发工具,从而保证了内容的可移植性和多样性。andr

9、oid平台为我们开发应用程序提供了一套很好的框架,我们可以在这个平台的基础上开发不同的应用程序,也可以开发新的组件供应用程序调用1。2.1 android特征dalvik虚拟:android采用的java虚拟机是自主开发的代号为dalvik的虚拟机技术,在保证api方面兼容的同时dalvik针对移动手机进行了大幅优化,占用资源更小,运行效率更高。内嵌浏览器:基于开源的浏览器网页排版引擎webkit。优化的图形:强大的自定义二维图形库。基于opengl es 1o标准的3d图形功能,在移动3d开发中有着至关重要的地位。sqlite数据库:sqlitet提供结构化的数据存储。它是一款轻型免费的且开

10、源的数据库,它的设计目标是嵌入式的,它占用的资源非常低、需要的内存空间少、处理速度比较快和支持事务处理功能等。多媒体支持:支持各种通用的音视频和静态图像格式,如mp3、jpg、png等。open core是android多媒体框架的核心,所有android平台的音视频采集,播放的操作都是通过它来实现的。通过open core,程序员可以方便快速的开发出想要的多媒体应用程序。gsm技术:(依赖硬件)global system for mobile communications,全球移动通讯系统,俗称“全球通”,是第二代移动通信技术,其开发el的是让伞球各地可以共同使用一个移动电话网络标准,让用户

11、使_一部手机就能行遍全球。蓝牙,edge,3g,and wifi是一种短距离的无线连接技术,在短距离内可以实现话音和数据的无线传输。edge(enhailced data rate for gsm evolution),是增强型数据速率gsm演进技术。camera,gps,compass,and accelerometer:(依赖硬件)gps(globalpositioning system)itti驯全球定位系统。它是一个由覆盖全球的24颗1j星组成的卫星系统。compass是个开放源代码的java搜索引擎框架。强大的开发环境:包括一个设备模拟器,调试工具,内存和性能检测,以及eclipse

12、ide的开发插件。eclipse是个集成开发环境2。2.2 android架构android的架构是linux内核、c/c+函数库、dalvik虚拟机、应用框架以及关键应用程序构成的,如图2-1。通过编译基于框架的应用程序可以降低开发负荷。应用软件原则上是在dalvik vm上运行的。图2-1 android架构图32.2.1 关键应用程序android平台内包含一些关键应用程序,如邮件收发客户端程序、短信收发程序、日历和网页浏览器等,开发者可以在其平台上开发更多有特色的应用程序。开发语言是java。2.2.2 应用程序框架android应用程序的开发基于框架和组件。android本身已在其框

13、架中提高了许多的组件供应用程序调用,当然开发者也开放新的组件,并将组件放入应用程序框架中,以供自己和其它应用程序调用。2.2.3 c/c+函数库android应用程序框架之下是一套c/c+函数库,它们服务于android应用程序组件,其功能通过组件间接提供给开发者。这些函数库包括:标准c函数库、媒体功能库、浏览器引擎、2d和3d图形库、基于web应用的的安全协议ssl、用于点阵和矢量字体渲染的freetype以及sqlite引擎等。2.2.4 java程序运行环境android的java程序运行环境包含一组java核心函数库及dalvik虚拟机,它们有效地优化了java程序的运行过程。所有的a

14、ndroid应用都运行在它自己的进程里,该进程是一个dalvik虚拟机的实例,dalvik被设计成能在一台设备上高效的运行多个虚拟机实例。dalvik虚拟机的可执行文件被封装成dalvik可执行格式(.dex)。这是被优化过的最小内存依赖的格式。java编译器(dx工具)将注册了的和运行时用到的类编译成.dex格式。dalvik虚拟机依赖于底层linux内核提供的功能,如线程机制,和内存管理机制等。2.2.5 linux内核android系统平台是基于优化了的linux内核,是其系统平台的核心。它提供诸如内存管理、进程管理、设备驱动等服务,同时也是手机软硬件的连接层,提供了一个屏蔽层用于屏蔽硬

15、件和上层软件。2.3 android应用的构成和工作机制对于一个android应用程序来说,是由activity、 intent receiver 、service、content provider四部分组成,但并不是每一个android应用程序都必须由这四部分组成。在应用程序中使用时,需要在配置文件androidmainfestxml中进行配置。这个配置文件是每个android应用程序所必需的,用于定义应用程序的组件、组件的功能以及必要条件等。2.3.1 activityactivity是构成应用程序中最重要的构造块, 在android应用程序中,几乎都是通过activity来与用户进行交互

16、,所以activity主要负责的就是创建与用户进行交互的显示窗口,你可以在这些窗口里通过调用setcontentview(view)方法来显示你自己的用户界面。1. 活动生命周期活动(activity)在系统中以活动栈的形式进行管理。当一个新的活动启动后,被放到了栈项,成为了运行活动,而新活动之前的活动在活动栈里总位于新活动之下,直到新的活动退出才重新回到前台。 图2-2 activity状态变换路径图4从图2-2可以看出,activity有三个关键的循环:(1)活动的整个生命期:从首次调用oncreate(bundle)开始,到最终调用ondestroyo结束。在oncreate()中进行所

17、有初始化,在ondestroyo时进行清理工作,释放资源。(2)活动的可见生命期:从调用onstart()开始,到onstop()被调用为止。在这段时间内,即使活动不与用户进行交互,用户也可以在屏幕上看到它。在这两个方法调用之间,可以维护活动显示给用户的资源。onstart()和onstop()方法可以多次调用,因为活动随时可以在可见和隐藏之间进行转换。(3)活动的后台生命期:从调用onresume()开始,到onpause()被调用为止。在这段时间内活动处于其它所有活动之前,并与用户进行交互。一个活动可以不断在resumed状态和paused状态之间变换4。2. 活动之间的切换android

18、使用了intent类来实现活动之间的切换工作。intent负责对应用中一次操作的动作、动作涉及的数据和附加数据进行描述。根据intent的描述,负责找到对应的组件,将intent传递给调用的组件并完成组件的调用。因此,intent起着一种媒体中介的作用,专门提供组件互相调用的相关信息,实现调用者与被调用者之间的解耦。在应用中,我们可以以两种形式来使用intent:直接intent,指定了component属性的intent,通过指定具体的组件类,通知应用启动对应的组件。间接intent,没有指定comonent属性的intent,则需要包含足够的信息,这样系统才能根据这些信息,在所有的可用组件

19、中,确定满足此intent的组件。2.3.2 intent receiverintent receivert是用于对外部事件的响应,当外部事件发生时,会使用notificationmanager通知用户。当一个intent receiver被触发时,系统会在需要的时候启动对应的应用程序。如在本系统中,当用户正在其它界面进行操作时,有好友发送消息过来,就会以通知的形式发送到当前界面的正上方来通知用户。各种应用还可以通过使用contextbroadcastintent()将它们的intent receiver广播给其它的应用程序,实现应用之间的通讯。2.3.3 serviceservice是提供连

20、续信息的应用程序。它是运行于应用程序后台的服务,在用户进行其它活动的时候,这个服务将一直运行在基于android平台的即时通讯系统的研究与实现后台直到用户停止该服务或服务运行结束。本系统客户端扩展功能的音乐播放就是采用service来进行设计和开发的,使用户可以边聊天边听音乐。2.3.4 content providercontent provider应用程序能够将它们的数据保存到文件、sql数据库和其它的存储设备中。当应用程序需要使用存储设备中的数据时,可以使用content provider来完成。使用content provider能够灵活的替换底层使用的存储设备,使开发者可以专著于应用

21、逻辑的开发,不用考虑底层存储设备的细节,从而使应用系统具有良好的数据2.3.5 rss解析剖析在android平台上可以使用simple api for xml(sax)、document object model(dom)和android附带的pull解析器解析xml文件。 (1)使用sax读取xml文件 sax是一个解析速度快并且占用内存少的xml解析器,非常适合用于android等移动设备。sax解析xml文件采用的是事件驱动,也就是说,它并不需要解析完整个文档,在按内容顺序解析文档的过程中,sax会判断当前读到的字符是否合法xml语法中的某部分,如果符合就会触发事件。所谓事件,其实就是

22、一些回调(callback)方法,这些方法(事件)定义在contenthandler接口5。下面是一些contenthandler接口常用的方法: startdocument()当遇到文档的开头的时候,调用这个方法,可以在其中做一些预处理的工作。 enddocument()和上面的方法相对应,当文档结束的时候,调用这个方法,可以在其中做一些善后的工作。  startelement(string namespaceuri, string localname, string qname, attributes atts)当读到一个开始标签的时候,会触发这个方法。namespaceuri就

23、是命名空间,localname是不带命名空间前缀的标签名,qname是带命名空间前缀的标签名。通过atts可以得到所有的属性名和相应的值。要注意的是sax中一个重要的特点就是它的流式处理,当遇到一个标签的时候,它并不会纪录下以前所碰到的标签,也就是说,在startelement()方法中,所有你所知道的信息,就是标签的名字和属性,至于标签的嵌套结构,上层标签的名字,是否有子元属等等其它与结构相关的信息,都是不得而知的,都需要你的程序来完成。这使得sax在编程处理上没有dom来得那么方便。 endelement(string uri, string localname, string name)

24、这个方法和上面的方法相对应,在遇到结束标签的时候,调用这个方法。 characters(char ch, int start, int length)这个方法用来处理在xml文件中读到的内容,第一个参数用于存放文件的内容,后面两个参数是读到的字符串在这个数组中的起始位置和长度,使用new string(ch,start,length)就可以获取内容。(2)使用dom读取xml文件 除了可以使用 sax解析xml文件,大家也可以使用熟悉的dom来解析xml文件。 dom解析xml文件时,会将xml文件的所有内容读取到内存中,然后允许您使用dom api遍历xml树、检索所需的数据。使用dom操作

25、xml的代码看起来比较直观,并且,在某些方面比基于sax的实现更加简单。但是,因为dom需要将xml文件的所有内容读取到内存中,所以内存的消耗比较大,特别对于运行android的移动设备来说,因为设备的资源比较宝贵,所以建议还是采用sax来解析xml文件,当然,如果xml文件的内容比较小采用dom是可行的。(3)使用pull解析器读取xml文件 除了可以使用 sax和dom解析xml文件,大家也可以使用android内置的pull解析器解析xml文件。 pull解析器的运行方式与 sax 解析器相似。它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元

26、素并触发相应事件。事件将作为数值代码被发送,因此可以使用一个switch对感兴趣的事件进行处理。当元素开始解析时,调用parser.nexttext()方法可以获取下一个text类型元素的值3。2.4 本章小结本章对android平台的特征、架构以及android应用的构成和工作机制进行了详细的分析。对于android应用程序来说,主要由activity、intent receiver、service和content provider四部分组成,但并不是对于每一个应用程序,这四部分都是必须的。activity是应用程序中最重要的一种构造块,我们对其进行了详细的分析,包括activity的生命周

27、期以及activity之间的切换。第三章 开发环境介绍及构建android平台为开发者提供了源码开放的软件开发包( sdk) ,它包含了使用java语言开发android平台应用的必要工具和组件(api) 。进行开发前先要建立合适的开发环境,其中基于java的整合型可扩展平台eclipse是我们的首选。搭建环境所需要的软件:l 操作系统:windows xp 或 linux;l 软件包:android sdk,adt;l ide环境:eclipse ide + adt eclipse3.3以上;l jdk:java runtime environmcnt,jdk;安装步骤:l 安装jdk 然后

28、配置环境变量;l 安装eclipse;l android sdk配置/安装:首先在l 安装android adt插件:1.打开eclipse,在导航菜单中选择help-install new software。在work with中输入 https:/dl- 然后输入name,随便取个有意义的,都选中安装,完毕后重启eclipse;2.在eclipse里配置sdk路径,选择windows->preferences->android,选择android sdk的位置6。第四章 需求分析4.1功能需求rss阅读器扮演着与用户直接交互并且提供服务的重要角色,它需要提供良好的用户体验,方便

29、用户操作,接收用户的操作并把这些操作转换成相应的命令,采用用户活动的方式完成各个服务的逻辑流程。本软件主要解析腾讯和新浪提供的rss reed,其功能需求主要包括以下几方面内容,业务流程如图4-1所示:(1)不同view之间的切换功能用户通过手指的左右滑动来切换不同的视图,方便用户在不同视图中查看信息和行操作。如图4-2所示:(2)新浪rss功能根据频道名称解析出这个频道所包含的内容并记录,在根据这些内容链接网络,通过htmlparse的解析获取相应的内容并保存;切换不同的频道。如图4-3所示:图4-1 业务流程图图4-2 主界面用例图图4-3 新浪rss用例图(3)腾讯rss功能该功能与新浪

30、rss相似,如图4-4所示:图4-4 腾讯rss用用例图(4)历史记录浏览功能记录用户浏览过的内容,以方便用户再次查看,这样节省gprs流量,减少用户的损失;当用户不需要这些记录的时候可以清除掉这些记录。如图4-5所示:(5)收藏功能当用户对一些文章感兴趣时,可以将其添加至收藏列表;当用户不需要某条记录是可将其从收藏列表中删除。如图4-6所示:(6)本地缓存在浏览新闻和文章的过程中会下载图片和文字内容,将这些内容保存值本地,在下次浏览同样的内容的时候就不用再次链接网络,直接在本地读取就可,节省用户的gprs流量;当手机存储空间不足时用户可以选择删除这些本地缓存。图 4-5 浏览记录用例图图4-

31、6 我的收藏用例图(7)异步更新访问网络比较耗时间,显示一些提示信息向用户表示本软件正在运行,并异步加载数据,更新ui界面。4.2性能需求手机软件要有良好的用户体验,良好的用户体验体现在以下几个方面:(1)界面友好用户界面要简洁直观,设计合理,方便用户操作,让用户操作起来比较舒服,并且ui视觉效应好。(2)快速响应快速处理用户的输入或请求,对于需要长时间处理的部分,在其处理时可以给用户一个提示,告知用户该软件正在运行。(3)无缝性一个常见的无缝问题就是一个应用的后台进程(如service或broadcast receiver)对某事件作出响应而弹出对话框,这看起来仿佛并无大碍,特别是当你在模拟

32、器上单独地构建和测试你的应用时。然而,当你的应用在真正的设备上运行,后台线程显示对话框时,你的应用当时可能没有获得用户焦点。这就会出现你的应用会在活动的应用后面显示对话框,或者从当前应用中获得焦点并显示对话框的情况,而管论当时用户正在做什么(如正在打电话等)。那样的行为可能对你的应用或用户不起作用。为了避免这些问题,你的应用应该利用适当的系统资源notification类,来通知用户。利用通知,你的应用可以通过在状态条上显示一个图标来通知用户事件已经发生,而非获得焦点和打断用户1。4.3数据需求(1)rss feed的存储,主要是腾讯和新浪数据源的存储,(2)收藏夹内容的管理,主要是对收藏内容

33、的添加和删除操作。(3)图片资源的缓存,将下载的图片资源存储在手机自带的内存或者存储在sdcard中;用户也可以清楚这些缓存资源;使用缓存资源来节省gprs流量。(4)记录用户浏览过的内容,方便用户再次查看4.4安全需求android安全中的一个重要的设计点是在默认的情况下应用没有权限执行对其他应用程序,操作系统或用户的有害操作。这些操作包括读取用户的隐私数据,访问网络,保持设备活动等等,应用程序的进程是一个安全的黑盒子,在没有给它权限的时候它不能干扰其他应用程序。第五章 android数据库的设计数据结构组织和数据库文件的设计要根据不同的用途,使用要求等来决定数据整体组织形式等一些问题。数据

34、库中的数据按一定数据模型组织、描述和存储,具有较小的重复度。较高的数据独立性和易扩展性,并且可以再被一定范围内的各种用户共享。在涉及数据库的软件开发中,需要根据有待解决的问题的性质、规模,以及所采用的前端程序创建工具等,做出合适的数据库类型选择。5.1 数据库及字段属性设计本项目中的数据库设计比较简单,主要涉及两个表:mylove和history;mylove主要是存储收藏的内容,history主要存储历史浏览记录,这两个表的字段一样,下面介绍history的字段,如表5-1所示:字段说明:id 记录的id号,title 内容的标题,link 内容的url,body 内容主体。表5-1 his

35、tory字段表属性数据类型允许空主键idintegernot nullprimary keytitletextlinktextbodytextmylove与history相同,就不重复介绍了。5.2数据库的连接这里将介绍如何进行android数据库的连接,android中自带的sqlite数据库是十分小型的数据库,这样正适合android这种移动平台使用。android数据库的存储位置在data/data/<项目文件夹>/databases/目录下,android是利用contentprovider作为内容提供商,sqliteopenhelper数据库帮助类来进行对数据库的创建和操

36、作。通过context.getcontentresolver()方法直接对数据库进行操作。程序中数据库的类为rssdb extend sqliteopenhelper(继承关系)。5.2.1数据库创建android提供了标准的数据库创建方式,继承sqliteopenhelper,实现oncreate和onupgrade两个方法,有个好处就是便于数据库版本的升级,连接数据库的算法如下:public rssdb(context context) /创建数据库super(context, db_name, null, db_vertion);public void oncreate(sqliteda

37、tabase db) /类创建是调用,在这里主要创建tablepublic void onupgrade(sqlitedatabase db, int oldversion, int newversion) /版本升级时调用数据库创建不成功会抛出filenodfindexception异常。5.2.2 数据库操作打开数据库操作:db = this.getwriteabledatabase();this表示rssdb执行sql语句:db.execsql(sql);插入数据:db.insert()删除数据:db.delete();更新数据:db.update()查询数据:db.query();当执

38、行完这些操作后,一定要关闭数据库连接:db.close();这些操作的具体使用方法可参照android sdk。 第六章 系统设计与实现6.1 rss资源的收集和分析目前有很多门户网站支持rss订阅,例如新浪,腾讯,搜狐,百度等,本软件主要收集了新浪和腾讯的rss 站点,例如新浪所提供的站点分为:新闻中心,体育新闻,科技新闻,财经新闻,军事新闻等;新闻中心中包括各个站点的链接,例如新闻中心中的新闻要闻的rss地址是rss有固定的格式,截取新浪新闻的新闻要闻的部分内容:<?xml version="1.0" encoding="utf-8"?>

39、.<item><title><!cdata科技中国互联网5月批发ipo 富豪与泡沫齐飞(05/05 10:58)></title><link><author>www.sina.com.cn</author><guid><category><!cdata></category><pubdate>thu, 5 may 2011 02:58:57 gmt</pubdate><comments></comments><

40、description><!cdata侯继勇 北京报道5月4日晚,人人网在北京国贸三期地下一层中国大宴会厅举行庆功宴。除了人人网留守国内的高管,主要参会人员是媒体记者。活动已经格式化:有领导讲话,有晚宴,有抽奖,最后是人人网创始人陈一舟的视频连线接受国内媒体记者采访,却会回避所有尖锐.></description></item><item><title><!cdata科技福布斯:人人公司加入中国高价科技股俱乐部(05/05 10:56)></title><link><author>

41、www.sina.com.cn</author><guid><category><!cdata></category><pubdate>thu, 5 may 2011 02:56:22 gmt</pubdate><comments></comments><description><!cdata></description></item>.如上,接下来对这些内容进行分析:<?xml version="1.0" enc

42、oding="utf-8"?>代表这个文件的数据格式,这一般分为utf-8和gb2312;每条信息在<item></item>中包含,这里面有很多节点,每个节点的内容有各自代表的信息:title:代表标题信息link:代表这篇文章的链接地址author:代表这篇文章的作者guid:与link相似,代表这篇文章的链接category:代表这篇文章所属类型pubdate:代表这篇文章发布时间comments:代表这篇文章的评论description:代表这篇文章的简述综合以上信息,完成rss阅读不会有问题,收集新浪和腾讯的这些rss站点,记录在一个

43、xml文件中,用于程序的读取和解析,本软件收集的内容及格式,以新浪为例,部分内容如下:<?xml version="1.0" encoding="utf-8"?><news title="新闻中心"><outline title="新闻要闻" xmlurl="flag="sina_ddt" encoding="utf-8" /><outline title="国内要闻" xmlurl="flag

44、="sina_ddt" encoding="utf-8" /><outline title="国际要闻" xmlurl="flag="sina_ddt" encoding="utf-8" /><outline title="社会新闻"xmlurl=" flag="sina_ddt"encoding="utf-8" /><outline title="时政要闻"x

45、mlurl=" flag="sina_ddt"encoding="utf-8" /> .其中title表示rss的类型xmlurl表示一个rss地址连接encdoing表示rss地址连接中的内容的数据格式flag有特定的含义,根据rss地址连接获取到的每条信息都有一个对应的连接,这个连接对应的内容用浏览器查看源文件,可以发现我们所需要的内容一般在一块特定的区域中,其他的信息我们都不需要,而且那些信息很浪费流量,根据这块特定的区域,找出起始位置和结束位置,注意,这个起始和结束的位置在这个连接的源文件中必须是唯一的,flag中的值就是起始和结

46、束位置,这个值对应该项目中res/values/arrays.xml;例如时政要闻对应的flag是sina_ddt,sina_ddt表示的内容是:<array name="sina_ddt"> <item>string/sina_ddt_begin</item> <item>string/sina_ddt_end</item></array>根据sina_ddt这个值就可以在代码中解析出起始位置和结束位置,然后根据这两个位置就可以解析出我们需要的内容。6.2 系统界面的设计6.2.1 主界面的实现and

47、roid的每一个可视化界面,都有其唯一的布局配置文件,该文件中有各种布局的方式,和各种资源文件如图像,文字,颜色引用等,程序在运行时可以通过代码对各个配置文件进行读取,这样可以形成不同的可视化界面和绚丽的效果。该软件的主界面是一个activity,android工程在启动每一个activity时都会首先执行oncreate()方法,如下:public void oncreate(bundle savedinstancestate) super.oncreate(savedinstancestate);setcontentview(r.layout.main_tabs);该方法主要执行界面的初始

48、化操作,activity有个设置布局的方法:setcontentview(int id),参数为资源id,该id在工程目录res/layout下,主界面的布局文件为main_tabs,下面是该布局文件的结构:<?xml version="1.0" encoding="utf-8"?><linearlayout ><viewflipper ><include /><include/><include /><include /></viewflipper><

49、/linearlayout>在线性布局<linearlayout>中添加viewflipper,viewflipper可以用来指定framelayout内多个view之间的切换效果,可以一次指定也可以每次切换的时候都指定单独的效果。该类额外提供了如下几个函数: · isflipping: 用来判断view切换是否正在进行 · setfilpinterval:设置view之间切换的时间间隔 · startflipping:使用上面设置的时间间隔来开始切换所有的view,切换会循环进行 · stopflipping: 停止view切换 vi

50、ewflipper中<include>不同的布局文件,这样就可以在同一个activity中切换不同的布局,这个activity实现ongesturelistener这个接口,实现接口里面的方法,就可以实现手势处理,实现更好的用户体验。这些组件都有很多属性可以设置该组件的位置,大小,背景颜色等;如:orientation=”horizontal” :此线性布局的子部件水平对齐 layout_height=”fill_parent” :布局的高度为填满父布局 layout_width=”wap_content” :布局的宽度由子部件的宽度决定6.2.2主界面中子界面的实现在主界面中实现

51、四个界面的切换,分别是我的收藏,腾讯rss,新浪rss和浏览记录,分别对应的布局文件是rss_love.xml,qq_main.xml,sina_main.xml和rss_history.xml,这些文件的在工程的res/layout/下。1. 我的收藏和浏览记录界面的实现我的收藏和浏览记录的界面类似,布局文件中主要是listview组件,在android开发中,listview是比较常用的组件,它一列表的形式展示具体内容,并能根据数据的长度自适应显示。listview需要一个适配器,android自带的一些适配器如simplaadapter显示比较单一,所以本软件中继承baseadapter

52、,通过对这个适配器的扩展实现我们需要的效果,扩展成一行能显示多个内容。由于baseadapter是一个抽象类,我们需要实现里面的getview方法返回一个view,即视图,视图可以显示在activity上,这样就可以看到我们想要的界面。listview有一个监听器onitemclicklistner,实现里面的方法,就可以监听touch事件,当手指点击到每一行时,可以通过listview.getitemposition(int potion)该行信息,这样就可以通过intent传递数据到其他的activity。本程序的思路是点击某一行,跳转到另一个activity,显示新闻的内容,如图6-1和

53、6-2所示。图6-1 浏览记录页面图 图6-2我的收藏界面图2. 腾讯rss界面的实现这个界面为了更好的用户体验,使用了expandablelistview,expandablelistview是android中的手风琴,个人感觉效果相当棒,它是一个垂直滚动的显示两个级别列表项的视图,如图6-3所示,类似二级菜单,列表项来时expandablelistadapter;点击组可以单独展开。expandablelistview的主要方法:expandgroup(int grouppos) :在分组列表视图中展开一组,setselectedgroup(int groupposition) :设置选择

54、指定的组。setselectedchild(int groupposition, int childposition, boolean shouldexpandgroup) :设置选择指定的子项。getpackedpositiongroup(long packedposition) :返回所选择的组getpackedpositionforchild(int groupposition, int childposition) :返回所选择的子项getpackedpositiontype(long packedposition) :返回所选择项的类型(child,group)isgroupexpa

55、nded(int groupposition) :判断此组是否展开expandablelistviewd数据源设置是调用expandablelistview.setadapter(expandablelistadapter adapter),expandablelistadapter是一个接口,baseexpandablelistadapter实现了这个接口,我们通过继承这个类,重写父类的一些方法,如:getgroupview ::获取组的视图getchildview:获取某一组下的子视图getgroupcount:获取组的个数getchildrencount:获取某一组下的子视图的个数ischildselectable:子视图是否可以被选中baseexpandablelistadapter需要设置数据源,这个数据源是从xml文件中读取,关于xml读取的实现在下面介绍。 图6-3 腾讯rss图3. 新浪rss界面的实现 新浪rss界面 (gridview) 图6-4 点击新

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论