【问题标题】:How to store RSS feeds in Android?如何在 Android 中存储 RSS 提要?
【发布时间】:2013-08-13 00:52:28
【问题描述】:

我想将 RSS 提要缓存到 SQLite 数据库中以提高应用程序的性能。
我只关心最基本的 RSS 提要,即 titledescription、URL guidpubDate。到目前为止,我可以处理它们并将它们存储到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.是的,然后停止解析并将此提要添加到数据库中。

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

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

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

【问题讨论】:

    标签: android rss android-sqlite


    【解决方案1】:

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

    更新供稿

    遍历检索到的提要中的每个项目,查看guid 是否已存在于数据库中,如果存在,则跳过它。

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

    所以,修改你的逻辑:

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

    项目顺序

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

    SELECT * FROM items ORDER BY pubDate DESC

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

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多