4

因为我注意到 SimpleCursorAdapter 类已被弃用,我现在应该利用我非常喜欢的新 Loader API,但是当我尝试这样做时,我发现 CursorLoader 仅适用于 ContentProvider。

现在我的问题是,我真的需要内容提供商吗?甚至官方指南都说:

如果您不打算与其他应用程序共享数据,则无需开发自己的提供程序。但是,您确实需要自己的提供程序在您自己的应用程序中提供自定义搜索建议。如果要将复杂数据或文件从应用程序复制并粘贴到其他应用程序,您还需要自己的提供程序。

而且我认为我不需要任何这个+因此会产生不必要的复杂性。所以..我应该怎么做,破解我自己的 CursorLoader 以仅与我的数据库一起工作(没有 ContentProvider 的 CursorLoader 使用),老实说我不太喜欢,或者我应该把它吸起来并遵守提供者?

谢谢!

4

2 回答 2

4

您可以编写一个Loader(或使用CommonsWare's SQLiteCursorLoader)来直接查询您的SQLiteDatabaseContentProvider该文档是正确的,因为如果您的应用程序只需要简单地访问本地数据(而不是与不同的进程/应用程序共享该数据),您实际上并不需要 a 。

也就是说,ContentProvider确实提供了一些好处。例如,您需要一个SyncAdapter使用SearchManager. 我尝试将这些合并到我的应用程序中,所以我发现自己ContentProvider一直在实现 s。ContentResolver还提供了一种在进行更改时向底层数据源提供全局通知的简单方法。例如,将在其上CursorLoader注册一个,导致当您调用给定的 时收到通知。如果您要直接从您的网站加载数据,那么设置它需要更多的工作。ContentObserverCursorCursorContentResolver#notifyChange(Uri uri, ContentObserver observer)UriSQLiteDatabase

于 2012-08-15T14:12:10.287 回答
1

两个选项都和另一个一样好。这是一个偏好问题。

就我个人而言,我认为将内容提供程序用于不会与其他应用程序共享任何内容的应用程序烦人且背后有痛苦,但我在一次采访中听到了一个有效的建议(它来自那些大启动类型的应用程序,例如 Pocket 或 Flipboard)说:“即使一开始可能听起来很复杂,也可以按照 Android 的方式编写代码,因为这将在未来节省时间/精力”我认为建议关注事实使用推荐的方式,获得支持,修复错误并且更容易更快地扩展。

于 2012-08-15T14:05:26.290 回答