数据库和Web服务模型

3

我正在观看关于这个主题的2010年Google I/O视频,并有一些问题,以确保我正确理解。

Google I/O 2010 - Android REST客户端应用程序

请注意,我对CursorAdapters的理解非常有限。

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

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

场景:

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

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

另外,假设我有多个活动,我是否需要为每个带有列表的活动拥有静态游标,在Activity的onCreate中获取该游标,如果该游标为空,则访问我的DataBroker?


我想数据库的访问也需要在一个服务中进行。那么我是要有一个服务(访问数据库)启动另一个服务(访问 Web 服务)吗? - Andrew
我认为我更倾向于使用ContentProvider模型。如果有人知道一些带有代码摘录的教程,我真的可以用一下。 - Andrew
1个回答

1

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

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

1)我不在Service内执行Cursor查询。我在Activity中调用Cursor,然后调用Service(DataBroker)来查询新数据的Web服务。如果发现新数据,则DataBroker广播一条消息,由任何正在侦听的Activity接收,然后Activity重新查询Cursor。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接