首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安卓ContentProvider支持DB表的添加-交换-删除功能吗?

安卓ContentProvider支持DB表的添加-交换-删除功能吗?
EN

Stack Overflow用户
提问于 2011-03-20 12:04:04
回答 1查看 284关注 0票数 0

我被要求提供一个用于同步云数据库和设备数据库的双缓存方案。要求是创建一组表,然后在某个时间点,对同一组表的镜像进行同步。完成后,预计ContentProvider将在应用程序不注意的情况下将一个集合交换为另一个集合。

这个是可能的吗?

我能安全地添加-交换-删除表吗?我是否可以安全地添加-交换-删除多个表-某些活动可能正在显示连接?

欢迎评论和想法,但它不是“合并同步”现有表的选项。

我担心的是,在操作表集的Activities或Services中可能存在未完成的游标,并且无法确保它们在删除可能正在访问的表之前关闭了游标。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-04-11 03:37:01

是的,这是可能的(尽管你的客户对两张表的要求听起来像是一个非常丑陋的黑客行为)。

您的ContentProvider应该提供一个游标,以响应特定的内容URI。如何将该URI映射到数据库中的表完全由您决定。

这样做:使用相同的数据库模式创建两个表"data1“和"data2”。像往常一样用你的数据填充data1。当应用程序查询您的URI时,使用一个游标来响应,该游标填充了data1之外的数据。

稍后,填满data2。当命令到来时,是时候切换表了,使用用于该数据的(一个) URI调用notifyChange()。所有正在监听的游标(您的显示应用程序正在使用RegisterContentObserver(),不是吗?)将被通知您的URI处的数据已更改。当他们收到通知时,他们会重新查询。这一次,您的ContentProvider将使用来自table2而不是table1的数据进行响应……游标不知道它是从哪个表中填充的,只知道它是从哪个URI填充的。因此,对于使用数据的应用程序来说,更改是完全透明的(只要两个表具有相同的模式)。

我已经忽略了命令开关和保存哪个表是活动的。这显然是一种特定于您的应用程序,但您应该能够找到一种很好的方法来持久化该信息。

至于表连接...当然,诀窍是确保连接逻辑本身发生在ContentProvider内部,而不是应用程序内部。然后,您只需一次切换几组表,并连接出正确的组。

最后,对于陈旧的游标,游标包含表数据的副本,而不是对表本身的任何引用。因此,如果表消失,在最坏的情况下,游标数据将变得陈旧。它不会让桌子开着或类似的东西。游标保留对它所来自的内容URI的反向引用,而不是表。所以,再一次,当它需要的时候,它会像上面一样工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5366707

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档