基于 Android 的 RSS 阅读器的设计与实现

2012-04-29 12:01郑巨洁朱响斌
电脑知识与技术 2012年34期
关键词:阅读器

郑巨洁 朱响斌

摘要:RSS是移动互联网时代实现信息共享的一种简便方式,通过RSS阅读器可以高效快捷地阅读获取信息。文中首先概要介绍了RSS技术,然后较为详细地介绍与讨论了Android平台下RSS阅读器的设计方案。

关键词:Android;RSS;XML;阅读器

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2012)34-8183-04

移动互联网的迅速发展,使用户面临着“信息冗余”与“信息过载”难题。RSS作为一种新型的信息服务方式,具有信息定制、信息推送和信息聚合的优势,使得用户可以在无需主动访问情形之下即可通过主动的信息推送从而知晓新闻信息,极大方便用户获取信息的效率。[1]

同时,随着以Android/iPhone为标志的移动互联网的兴起,基于Android的RSS客户端能够突破碎片化的限制,实现了在任何时间、任何地点获取最新新闻讯息的需求。使用户及时获取自己定制的最新信息,并有选择地进行高效阅读,从而给用户节约了大量宝贵的时间。[2]

1RSS技术概述

RSS由于其不同的技术源头,因此不同的技术团队对其有不同的解释,ReallySimpleSyndication(真正简易的聚合)、RDFSiteSummary(RDF站点摘要)或者RichSiteSummary(丰富站点摘要)。[3]

一个符合RSS语法规范的XML数据文件被称为RSSFeed,该文件一般以rss或xml作为后缀名。RSSFeed一般由一个元素及其子元素组成。其中根元素为,其必备属性version表明当前文档遵循的RSS规范。元素则包含了此频道的所有信息和内容,频道中的每条新闻用item来标注。根据语法规范规定,频道中可以含有多个子元素。子元素包含,<link/>,<description>三个必备子元素和若干定义的可选子元素。</p><p>2系统设计</p><p>设计RSS阅读器时主要有两种可选方案:</p><p>方案一RSS阅读器本地不存储任何RSSFeed以及其所包含的相应元信息以及新闻条目。当用户需要阅读信息时,app即时通过网络下载RSSFeedXML文件并对其进行解析,这种方案比较明显的缺点是对已手机移动网络要求高与耗费大。</p><p>方案二RSS阅读器不存储RSSFeed,但会对通过网络获取的RSSFeed做本地的数据持久化处理。该方案显著相应于方案一的优点是用户可以方便的同时阅读当天以及更早时期的信息,而且由于手机的网络环境限制,此方案的最大便利之处是用户可以实现节省流量的离线阅读与标记。</p><p>2.1数据持久化</p><p>此客户端的数据持久化以Android原生SQLite数据库为驱动。如图1所示,存储RSSFeed信息主要有两个数据表,即左侧的articles数据表与右侧的feeds数据表。其中feeds数据表存储用户订阅的RSSfeed的元信息,articles数据表存储用户订阅的RSSFeed其下的所有新闻item,两数据表之间通过唯一相同的表段feed_id相互关联,即articles数据表中的feed_id表明此新闻信息所从属的相应RSSFeed。其中,feed_id与article_id字段分别作为各自数据表的索引主键。</p><p>2.2RSSFeed文件的解析</p><p>对RSSFeedXML进行解析是实现RSS应用的前提。常用的解析方式如下有两种[4]:</p><p>1)DOM(DocumentObjectModel)解析方式。DOM解析方式是一种基于树的解析方式,是将文档构造为树形结构,能够方便地对文档进行遍历、修改、搜索等操作是其主要的优点,但是相应的要占用大量内存,而且解析速度渐慢。</p><p>2)SAX(SimpleAPIforXML)解析方式。SAX是一种基于事件驱动的解析方式,在对XML文档进行解析时,它可以只对文档的一部分进行解析,因此不必将整个文档调入内存,因此SAX解析方式相比于DOM解析方式的最明显优点是其内存消耗小,而且解析要相应更高效。</p><p>由于此客户端是基于资源有限的智能手机平台,因此在此设计采用SAX解析方式。</p><p>在使用SAX处理XML文件时,首先创建SAX解析器工厂对象SAXParserFactory,再通过工厂对象创建SAX解析器SAXParser,再装载自定义ContentHandler(此处为RSSParser),最后设置URL开始解析,完整流程如图2所示。</p><p>3系统实现</p><p>3.1RSSFeed读取</p><p>通过RSSReader中的函数getFeed()读取包含RSSFeedXML文件。getFeed()函数参数为RSSFeed的url地址,从url所指向的网页获取xml文件,从而开始解析的过程。</p><p>关键实现代码如下:</p><p>在对RSSFeedXML文件进行解析时,当扫描到<channel>标签时,此时系统即会构造生成RSSFeed对象feed,而此后扫描到的<title>,<link/>,<description>信息应该理解为属于RSSFeed自身的元信息。而当扫描到<item>标签而且此时feed对象已经存在时,系统就会判定此时扫描到的单条新闻即是从属于feed,而且会把此后扫描到的<title>,<link/>,<description>理解为属于此新闻的元信息,而在此之后扫描到的所有新闻会构造存储到ArrayList<rssitem>对象items。从而,在扫描完成返回的feed对象里即包含了RSSFeed的元信息以及其下的所有新闻条目。</p><p></rssitem></description>

关键实现代码如下:

3.2数据存储

当用户需要订阅相应RSSFeed,调用RSSManager的函数subscribe()即可对RSSFeed进行解析,在其中通过NewsDatabase中的函数insertFeed()与insertArticle()把相应RSSFeed元信息以及其中的新闻items插入到数据库中。

关键实现代码如下:

在数据存储完成后,当客户端需要获取相应新闻讯息时,即只要调用RSSManager的函数getFeedById(),其参数feedId即为新闻信息所属的RSSFeed在数据表中的id。从而即可以实现此RSS阅读器最适应于移动平台的离线阅读特性。

3.3UI设计

此RSS阅读器的界面主要包括三个Activity,而其中Activity与一般的实现方式不同的是采用Fragment进行动态填充加载。三个Activity分别为用户订阅的RSSFeed列表Activity,RSSFeed其下所有新闻的列表Activity与新闻的阅读界面Activity。

在RSSFeed列表中,会简略显示用户已订阅的RSSFeed的元信息,包括RSSFeed的标题与描述,当用户点击相应RSSFeed时,系统就会切换到RSSFeed文章详细列表中,其中会详细显示着各新闻的基本元信息与概述。如果用户想要阅读相应的新闻,只要点击相应位置即可,就可以进入到简洁的阅读界面。

图3-图5是本客户端运行在中兴u880其上时的工作截图。

图3 RSSFeed列表 图4 RSSFeed文章列表 图5 信息阅读界面

当然由于UI设计的水平有限,此客户端的美观性还有很多可改进之处。

4结束语

本设计实现了基于Android的RSS阅读器,并讨论了RSS阅读器实现的关键技术。该RSS阅读器界面友好,操作简单,用户可以聚合所关注的RSS资源,从而即时了解相关感兴趣网站的新闻讯息更新,大大节约了时间。

参考文献:

[1]王秀慧.RSS在线阅读器设计与实现[J].电脑编程技术与维护,2009(4):71-72.

[2]刘洋.RSS掀起手机阅读的革命[J].中国新通信,2006(6):79-80.

[3]张会娥,张智雄,林颖,等.基于RSS的科技信息聚合系统的设计和实现[J].现代图书情报技术,2005(7).

[4]李文江,李兴春.基于RSS2.0的新闻信息提取与发布[J].重庆文理学院学报,2008,27(6).

猜你喜欢
阅读器
基于反向权重的阅读器防碰撞算法
一种高效的RFID系统冗余阅读器消除算法
一种RFID网络系统中消除冗余阅读器的高效算法
盲人阅读器