android - 数据库和网络服务模型

标签 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到我的用户界面线程?这样做可能会在 Web 服务完成之前将 Cursor 返回到我的 UI 线程,但是,我假设,一旦 CursorAdapter 有了 Cursor,它就会自动显示对该数据库表所做的任何更改,是吗?

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

另外,假设我有多个 Activity,我是否正在为每个 Activity 设置一个静态 Cursor,并在 Activity 的 onCreate 中获取该 Cursor,如果该 Cursor 为 null,则访问我的 DataBroker?

最佳答案

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

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

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

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

关于android - 数据库和网络服务模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3533947/

相关文章:

java - Apache cxf java-first 和 SOAP 模块 npm

android - 在android中处理按钮上的多个点击事件

android - 加载大 PDF 时应用程序崩溃

android - 如何使用适用于 Android 的谷歌地图获取特化的医院详细信息?

database - 核心数据同步

mysql - 在 phpMyAdmin 中使用文件夹组织数据库

java - Spring-WS 验证签名并在端点中提取 SOAP-Header

Android后台网络错误恢复

mysql - SQL:完全外部连接不工作

java - Jersey 记录过滤器