2012-08-15 70 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

相關問題