2012-08-15 69 views
4

因为我注意到SimpleCursorAdapter类已被弃用,现在我应该利用新的Loader API,但是当我尝试这样做时,我发现CursorLoader只能与ContentProvider一起使用。做不共享的应用程序需要Content Provider吗?

现在我的问题是,我真的需要一个内容提供商吗?即使官方指南说:

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

我想我不需要任何关于这个+它因此造成不必要的复杂性。 那么..我该怎么做,破解我自己的CursorLoader只能用这样的数据库(CursorLoader usage without ContentProvider)工作,这实际上我不太喜欢,或者我应该吸取它并遵守制造商?

谢谢!

+0

这个[**博客文章**](http://www.androiddesignpatterns.com/2012/07/loaders-and-loadermanager-background.html)解释了为什么你不应该使用'managedQuery'和' startManagingCursor'方法。 'SimpleCursorAdapter'类不被弃用(尽管建议使用其中一个创建SimpleCursorAdapter的构造函数)。 – 2012-08-15 14:00:33

+0

对不起,我的坏,那是我的。感谢您的回复。 – urSus 2012-08-15 14:09:43

+0

[何时使用内容提供商]可能重复(http://stackoverflow.com/questions/4936712/when-to-use-a-content-provider) – Elvisjames 2016-08-19 20:33:35

回答

4

你可以写一个Loader(或使用CommonsWareSQLiteCursorLoader)查询您的SQLiteDatabase直接代替。该文档是正确的,因为如果您的应用只需要简单访问本地数据(而不是使用不同的进程/应用程序共享该数据),则您并不需要ContentProvider

也就是说,ContentProvider确实提供了一些好处。例如,您需要一个实现SyncAdapterSearchManager的搜索界面。我尝试将这些内容整合到我的应用程序中,所以我发现自己始终都在执行ContentProvider。在进行更改时,ContentResolver还提供了一种向底层数据源提供全局通知的简单方法。例如,CursorLoader将在其Cursor上注册ContentObserver,导致Cursor在给定的Uri上调用ContentResolver#notifyChange(Uri uri, ContentObserver observer)时收到通知。如果您要直接从您的SQLiteDatabase加载数据,那么设置该数据将需要更多的工作。

+0

使用自定义的ContentProvider,您可以执行复杂的查询,例如连接,拥有,分组等等? – RestInPeace 2015-05-11 23:46:36

1

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

就我个人而言,我认为使用内容提供商的应用程序将不会共享任何其他应用程序烦人和痛苦的背后,但有一个有效的建议,我在采访中听到(这是从像Pocket或Flipboard这样的大型启动类型的开发者)说:“即使听起来可能听起来复杂一些,请使用Android代码做代码,因为它将在未来节省时间/精力” 我认为这些建议重点关注使用推荐方式的事实,获得支持,修复错误并更快速地扩展。

+0

这不是一个“偏好问题”...每种方法都有起伏。无论如何,ContentProvider几乎都能正常工作(因为它几乎只是实际数据源的一个包装),但如果你实际上不需要它,那么实现它只是为你额外的工作。 – 2012-08-15 15:26:22

相关问题