数据库和Web服务模型

时间:2010-08-20 18:52:01

标签: android database web-services model cursor

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

Google I/O 2010 - Android REST client applications

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

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

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

场景:

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

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

另外,假设我有多个Activity,我是否正在为每个Activity创建一个带有列表的静态Cursor,在Activity的onCreate中抓取Cursor,如果该Cursor为null,则点击我的DataBroker?

1 个答案:

答案 0 :(得分:1)

由于没有人回复,我会回复我所做的事情(并且似乎正在发挥作用)

应该注意我已经重命名为DataBroker。我的ContentProvider现在被其他名称调用,现在我有一个名为DataBroker的扩展服务。

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

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