如何在Android中存储RSS源?

时间:2013-08-11 17:26:05

标签: android rss android-sqlite

我想将RSS提要缓存到SQLite数据库中以提高应用程序的性能 我只关注RSS提要的基本内容,即titledescription,网址guidpubDate。截至目前,我可以处理它们并将它们存储到Vector<Feed>,其中Feed是我的自定义类。

对于Android来说,我觉得很少有一些令人难以置信的东西 假设我有标题如下的饲料项目:

1. Cat Kills the Dog
2. Curosity Killed the Cat in Revenge
3. Y U NO leave Cat alone ?  

在第一次运行中,获取表的行数将返回零,这意味着我必须将所有源添加到数据库中。没问题。
更新Feed时出现问题。这是更新后的Feed:

*. Quick Brown Fox Jumps Over The Lazy Dog. Dog Dies.
1. Cat Kills the Dog
2. Curosity Killed the Cat in Revenge
3. Y U NO leave Cat alone ?

逻辑是:
1.开始解析RSS源 2.阅读新获取的RSS源的标题 3.它是否与数据库第一行的标题相匹配?
3.1。不,然后继续解析并将此Feed添加到数据库中 3.2。是的,然后停止解析并将此Feed添加到数据库。

问题是,现在添加的行将是表的 LAST ROW ,而在RSS XML提要中应该是第一行,以便后续比较变得更容易。

要做的是保持行的顺序类似于feed XML中的行 我该如何维护该订单?

或者,有没有更好的方法来组织和存储Feed?

1 个答案:

答案 0 :(得分:1)

首先,不要依赖于独特的标题。相反,请使用guid字段作为项目的唯一标识符(请参阅the RSS specification)。

更新Feed

浏览检索到的Feed中的每个项目,看看数据库中是否已存在guid,如果是,请跳过它。

如果不存在,请创建一个条目。

所以,修改你的逻辑:

  1. 开始解析RSS源。
  2. 阅读新获取的RSS Feed的guid
  3. 它是否与数据库中任何行的guid匹配? 3.1。不,然后继续解析并将此Feed添加到数据库。 3.2。是的,然后停止解析并将此Feed添加到数据库中。
  4. 商品订单

    还有一个名为pubDate的字段,用于指示项目的发布时间。只需存储数据库中每个项目的pubDate,并在检索时在ORDER BY子句中使用它:

    SELECT * FROM items ORDER BY pubDate DESC

    这将按照原始出版物的顺序为您提供项目。

    UPDATE :由于SQLite没有日期的本机数据类型,因此您可以在将其插入数据库之前使用the time/date helper functionsconvert pubDate to epoch format in your code