`
mondayw
  • 浏览: 139494 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

[译文]了解用于读取RSS和Atom新闻推送的JavaFX API(一)

阅读更多

原文:Learn about JavaFX's APIs for Reading RSS and Atom Newsfeeds

作者:Jeff Friesen

出处:http://today.java.net/article/2009/11/30/learn-about-javafxs-apis-reading-rss-and-atom-newsfeeds

 

JavaFX 1.2引入了许多有意思的API,其中包括了用于读取RSSAtom新闻推送(newfeed)的API。如果你还未曾使用过这些API来的话,你将会发现它们大大地简化了把新闻推送阅读器整合到JavaFX应用中这一任务。

本文向你介绍了RSSAtomAPI,首先研究它们的共同基础,然后浏览每个API的关键类,最后,通过探讨FeedTask类对新闻推送轮询的实现来深入了解这些API是如何工作的。

 

共同的基础

 

RSSAtomAPI分别是以抽象类javafx.async.Task为根源的共同基础框架上的两个分支,该类使得启动、停止和跟踪运行在后台线程中的活动(任务)成为可能。

Task提供onStartonDone变量来标识在任务启动和终止时被调用的函数,其他的变量则报告任务的进展情况和处置情况(成功或者失败),该类还提供了抽象的start():Voidstop():Void函数来启动和终止任务的执行。

抽象类javafx.data.feed.FeedTask扩展了Task,除了继承Task的变量之外,还重写了它的start()stop()函数,FeedTask提供了以下的函数和变量:

Ÿ           poll(): Void:轮询新闻订阅的location以获得更新的内容,提取和解析内容,然后交付给应用。

Ÿ           update(): Void:轮询新闻订阅的location,提取和解析所有内容,然后交付给应用。

Ÿ           headers(类型为javafx.io.http.HttpHeader[])标识了一系列每次轮询新闻推送时发送给locationHTTP请求标头,该变量默认为null

Ÿ           interval(类型为javafx.lang.Duration)指定了在再一次轮询新闻推送获得更新之前必须要间隔的时间长度,需要为该变量指明一个正数值,缺省值为0.0。(我不知道如果选择一个诸如60秒之类的正值作为轮询的默认值是不是会更好一些,也许可以用0.0来表明不需要轮询)

Ÿ           location(类型为String)指定了新闻推送的地址,该变量的缺省值为空串(””)。

Ÿ           onException(类型为function(:Exception):Void)标识了当前轮询期间发生异常时被调用的函数,该变量的缺省值为null

Ÿ           onForeignEvent(类型为function(:javafx.data.pull.Event):Void)标识了被调用来处理扩展元素的函数,这些新闻推送元素的命名空间URI不是Atom或者RSS,例如,某个给定的Atom新闻推送的推送元素的开始标记是这样指定的<feed xmlns="http://www.w3.org/2005/Atom" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/">,解析随后的<opensearch:totalResults>1911</opensearch:totalResults>元素得出三个陌生的项目(对应开始标记、文本内容和终止标记),因为totalResults的命名空间是http://a9.com/-/spec/opensearch/1.1/(以opensearch:前缀的方式指定)而不是http://www.w3.org/2005/Atom。该变量的缺省值为null

 

共同基础框架也根植于抽象类javafx.data.feed.Base之上,这是描述了各种新闻推送元素的RSSAtom类的基类,RSSRSSAtomFeed这些顶层元素类是Base子类的例子。

Base提供了一个namespaces变量(类型为javafx.data.Pair[]),该变量包含了对元素有效的命名空间的定义,每个Pair的名称部分指明了命名空间前缀,值部分指定了命名空间URI

Base还提供了一个parent变量(类型为Base),该变量用来表示父(把其包含之内的)元素,例如,AtomEntry元素类的parent变量指向包含它的Feed实例,如果没有父元素(像Feed这种情况)的话,则该变量的值为null

最后要说的是,Base提供了几个函数,在需要创建自定义的推送解析器的时候,它们会派上用场,因为这项工作超出了本文的范围,你可以参考Rakesh Menon的这篇博客文章Custom Feed Parsers以了解更多的内容和例子。

 

 

 

 

 

[译文]了解用于读取RSS和Atom新闻推送的JavaFX API(二)

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics