【问题标题】:Database and web service models数据库和 Web 服务模型
【发布时间】:2010-08-20 18:52:01
【问题描述】:

我正在观看有关此主题的 2010 年 Google I/O 视频,我有几个问题需要确保我能正确理解。

Google I/O 2010 - Android REST client applications

请注意,我对 CursorAdapters 的了解也非常有限

现在我的应用程序只有一个 UI 层。我使用一些 Google 教程创建了一个名为 DbAdapter 的对象,以在该数据库中创建一个小型数据库和一个表。

我创建了一个类,我调用 DataBroker(扩展 ContentProvider)来管理从数据库中检索数据并调用 Web 服务来更新数据。

场景:

1) 假设我想在我的 ListActivity 中显示一个项目列表。我是否正确假设我将在我的 DataBroker 中编写一个函数,该函数为我的数据库中保存这些项目的表创建一个游标,启动一个服务,该服务启动一个线程,该线程调用 Web 服务以获取其他项目,然后返回游标到我的 UI 线程?这样做可能会在 Web 服务完成之前将光标返回到我的 UI 线程,但是,我假设一旦 CursorAdapter 有光标,它会自动显示对该数据库表所做的任何更改,是吗?

2) 现在我的 ListView 中有一个项目列表。假设我给用户一些删除项目的功能。用户执行此功能。它应该调用我的 DataBroker 中的一个函数,该函数更新我的数据库中与该项目对应的行,将状态列设置为 STATE_DELETING (这将从 ListView 中删除该行,因为 Cursor 有一个不包括此状态的子句),然后触发服务会触发访问我的 Web 服务的线程,然后在完成后删除数据库中的行?

另外,假设我有多个活动,我是否正在为每个活动设置一个静态游标和一个列表,在活动的 onCreate 中抓取该游标,如果该游标为空,则点击我的 DataBroker?

【问题讨论】:

  • 我想数据库命中也需要在服务中。那么我要让服务(命中数据库)启动服务(命中网络服务)吗?
  • 我认为我更倾向于 ContentProvider 模型。如果有人知道的话,我真的可以使用带有一些代码摘录的教程。

标签: android database web-services model cursor


【解决方案1】:

由于没有人回应,我将用我所做的(并且似乎正在工作)回应

需要注意的是,我已经重命名了 DataBroker。我的 ContentProvider 现在被其他名称调用,并且我现在有一个扩展服务,我将其命名为 DataBroker。

1) 我不在服务中进行光标查询。我在 Activity 中调用 Cursor,然后调用 Service (DataBroker) 来查询 Web 服务以获取新数据。如果找到新数据,DataBroker 会广播一条消息,由任何侦听的 Activity 接收,然后 Activity 会重新查询 Cursor。

2) 我通过 Intent 将需要删除的行的 ID 交给我的服务 (DataBroker)。服务将该 ID 的状态列标记为 STATE_DELETING,使用 Web 服务让我的服务器知道该行已被删除,如果服务器确认,则从我的数据库中删除该行。此外,在该行被标记为 STATE_DELETING 之后,我会广播一条消息,任何有兴趣的活动都可能订阅该消息,让他们知道我已经这样做了。这样,Activity 可以重新查询其 Cursor(不返回 STATE_DELETING 行)。

【讨论】:

    猜你喜欢
    • 2012-11-20
    • 2019-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多