我想将RSS提要缓存到SQLite数据库中以提高应用程序的性能
我只关注RSS提要的基本内容,即title
,description
,网址guid
和pubDate
。截至目前,我可以处理它们并将它们存储到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?
答案 0 :(得分:1)
首先,不要依赖于独特的标题。相反,请使用guid
字段作为项目的唯一标识符(请参阅the RSS specification)。
更新Feed
浏览检索到的Feed中的每个项目,看看数据库中是否已存在guid
,如果是,请跳过它。
如果不存在,请创建一个条目。
所以,修改你的逻辑:
guid
。guid
匹配?
3.1。不,然后继续解析并将此Feed添加到数据库。
3.2。是的,然后停止解析并将此Feed添加到数据库中。商品订单
还有一个名为pubDate
的字段,用于指示项目的发布时间。只需存储数据库中每个项目的pubDate
,并在检索时在ORDER BY
子句中使用它:
SELECT * FROM items ORDER BY pubDate DESC
这将按照原始出版物的顺序为您提供项目。
UPDATE :由于SQLite没有日期的本机数据类型,因此您可以在将其插入数据库之前使用the time/date helper functions或convert pubDate
to epoch format in your code。