【问题标题】:Populating a ListVIew using SQLite and Server Data使用 SQLite 和服务器数据填充 ListVIew
【发布时间】:2011-10-18 20:32:39
【问题描述】:

我正在开发一个允许用户发送和接收消息的应用程序。消息存储在服务器上的数据库中。我想在ListView 中显示消息,类似于电子邮件收件箱。这是我计划的实施:

  • 在启动消息活动时,使用设备上存储的消息的CursorLoaderSQLite 缓存填充列表(例如,从上周开始)
  • 从服务器下载新消息并将它们添加到SQLite数据库,并更新Cursor
  • 在用户滚动时下载较旧的消息(但不要存储它们),并确保加载的消息足够多,滚动不会滞后。

这是我的问题:

  1. 总的来说,这似乎是一个好策略吗?
  2. 当我下载和存储新消息时,有没有办法更新Cursor,使其数据与SQLite 数据库同步?
  3. 当我下载旧邮件时,有没有办法可以将它们添加到Cursor,以便我可以让CursorAdapter 处理ListView

【问题讨论】:

    标签: android database sqlite listview loader


    【解决方案1】:

    是的,这听起来是个不错的策略。这里的关键点是将两个数据源(SQLite 和服务器数据)包装成一个源并从中获取数据。

    1. 是的,这听起来是个不错的策略。
    2. 当您修改底层数据集时,您应该调用notifyDataSetChanged,这将强制适配器重新获取它的数据。
    3. 正如我所说,这里的关键是拥有单一数据源结构,适配器将从该结构中获取数据。这里最好的解决方案是使用临时表。基本上临时表只存在于与数据库的单个连接的生命周期中,因此当您关闭连接时,该表将自动删除。当您打开数据库时,创建临时表并在其中插入所有消息。下载新消息时将它们插入真实表和临时表中,但下载旧消息时仅将它们插入临时表中。最后只使用临时表来获取数据。

    【讨论】:

      【解决方案2】:

      我不确定更新光标是什么意思。

      这是我的两分钱。

      创建一个更新数据库的服务/线程。 既然您说类似于邮件,这可以帮助您在新邮件到达通知区域时通知使用。

      然后每次用户从数据库启动活动查询。

      您可以使用时间戳或 messageId 来避免冲突。

      【讨论】:

      • 嗨,是的,你是对的 - 我可以在后台同步数据,然后当活动开始时,将从 sqlite db 加载新数据。我认为这将解决问题 2。我最大的绊脚石是问题 3。如何将来自 sqlite 数据库的数据和来自服务器的数据放在一个列表中?
      • 你总是从原地读取,那就是 sqldb。并且您将始终从服务器写入数据库。尽量保持简单。尝试使用一些唯一的 id 来唯一标识每条消息。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-19
      相关资源
      最近更新 更多