0

我想将 RSS 提要缓存到 SQLite 数据库中以提高应用程序的性能。
我只关心非常基本的 RSS 提要,即titledescription、 URLguidpubDate. 到目前为止,我可以处理它们并将它们存储到Vector<Feed>Feed的自定义类中。

作为 Android 的新手,有几件事让我觉得难以置信。
假设我有标题如下的 Feed 项:

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

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

*. 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。不,然后继续解析并将此提要添加到数据库中。
3.2. 是的,然后停止解析并将此提要添加到数据库中。

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

问题是要保持类似于提要 XML 中的行顺序。
我如何维护该订单?

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

4

1 回答 1

1

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

更新提要

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

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

所以,修改你的逻辑:

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

物品顺序

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

SELECT * FROM items ORDER BY pubDate DESC

这将按照原始发布的顺序为您提供项目。

更新:由于 SQLite 没有日期的本机数据类型,您可以使用时间/日期辅助函数或在代码中转换pubDate为纪元格式,然后再将其插入数据库。

于 2013-08-11T17:36:58.723 回答