gpt4 book ai didi

android - 没有 Content Provider 的 CursorLoader 和 SQLite

转载 作者:IT王子 更新时间:2023-10-28 23:40:32 25 4
gpt4 key购买 nike

我知道这已经讨论过了,但我想问一下目前的情况。我是否必须创建一个 ContentProvider 才能将 CursorLoader 与 sqlite 数据库结合使用?

我找到了

CursorLoader usage without ContentProvider

正如 Emmby 评论的那样,看起来正是我所希望的

  • 用户应该知道一个限制,那就是它没有刷新数据更改的机制(正如加载程序应该做的那样)

所以提到了另一种解决方案

https://github.com/commonsguy/cwac-loaderex

再次指出一些缺点

  • 但是,要使用自动重新查询,您需要为 UI 和更新使用相同的加载器,这限制了其对后台服务的可用性。

当然,在使用 LoaderManager 时,我们希望获得引入它的所有好处。所以我的问题是,是否有一种方法可以将 LoaderManager 与 sqlite 数据库结合使用,而无需实现内容提供程序,但仍能获得它的所有好处。

谢谢

最佳答案

您在帖子中提到的两个实现都提供了 CursorLoader 除了 能够在基础内容更改时接收通知的所有好处。

我最近一直在研究这个问题,我可以自信地告诉你,Android API 目前不提供仅使用原始 SQLiteDatabase 的方法(它只提供 ContentResolver#notifyChange()Cursor#setNotificationUri() 方法,用于通知在某个通知 Uri 下注册的所有 Cursor )。

也就是说,您现在的选择是:

  1. 自己实现一个观察者,它能够在内容更改时从 SQLiteDatabase 接收通知,并且能够以某种方式将这些通知中继到所有现有的 Loader s 在您的应用程序中。我写了一个相当广泛的blog post关于如何实现Loaders,如果你想接受这个挑战,可能会派上用场。或者……

  2. 使用 Mark Murphy 的 LoaderEx 库,并且只使用他的库提供的 AsyncTask 操作来修改数据库。请注意,他的任务之所以刷新 Loader 是因为它们在执行插入/更新/删除后立即在 Loader 上调用 onContentChanged,有效地告诉 Loader 内容已更改并且应该刷新其数据。

  3. 只需使用 ContentProviderCursorLoader 即可使用 ContentResolver#notifyChange() 方法通知 CursorLoader 内容发生了变化。

我正在尝试找出一个更好的解决方案,如果我找到/实现一个解决方案,我会在未来报告,但现在必须这样做。

关于android - 没有 Content Provider 的 CursorLoader 和 SQLite,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12869373/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com