ContentProvider

    android使用一種稱爲contentprovider的概念來將數據抽象爲服務。html

    這種內容提供給程序的理念看起來像是啓用了REST的數據提供程序。REST(REpresentational State Transfer具象狀態傳輸),它是一種設計風格,一般基於使用HTTP,URI和XML以及HTML這些現有的普遍流行的協議和標準。資源由URI指定,對資源的操做包括獲取,建立,修改和刪除資源;這些操做正好對應HTTP協議提供的GET,POST和DELETE方法。java

    要從ContentProvider檢索數據或將數據保存到Contentprovider,須要使用一組相似REST的URI。android

例如,若是要從封裝 圖書數據庫 的contentprovider獲取一組圖書,須要使用相似如下形式的URI:web

content://com.android.book.BookProvider/bookssql

要從 圖書數據庫 得到指定圖書(如23號圖書),須要使用相似如下形似的URI:數據庫

content://com.android.book.BookProvider/books/23網絡

    設備上的任何應用程序均可以利用這些URI來訪問或操做數據。因此,在應用程序之間數據共享上,ContentProvider扮演着重要角色。ide

    只有但願與外部或在應用程序之間 共享數據時,才須要使用contentprovider.網站

    對於內部數據訪問,應用程序可使用它認爲適合的任何數據存儲/訪問機制,例如:google

        首選項,一組鍵/值對,能夠用來存儲應用程序首選項。

        文件,應用程序內部的文件,能夠存儲在可移動存儲媒體上。

        SQLite,SQLite數據庫,每一個SQL數據庫對於建立它的包是私有的。

        網絡,一種機制,支持經過互聯網獲取或存儲外部的數據。

    Android中內置的contentprovider,記錄在android.provider Java包中。可在官網查看這些contentprovider的列表,連接爲http://developer.android.com/reference/android/provider/package-summary.html。這些sqlite數據庫一般具備擴展名.db,僅能從實現包訪問。任何來自該包外部的訪問都須要經過contentprovider接口

整體而言, contentprovider方法相似於如下業內抽象機制:(網站,REST,web服務, 存儲過程??

網站同樣,設備上每一個contentprovider都會使用字符串註冊自身,這個字符串相似於 域名,但稱爲受權(authority)。

受權就像contentprovider的域名。在進行受權註冊以後,這些contentprovider就擁有一個基礎域名,這個基礎域名是一個起始URL。

在androidManifest.xml中註冊受權:

<provider android:name="SomeProvider"
     android:authorities="com.your-company.SomeProvider"/>

得到了由受權開頭的URL:

content://com.your-company.SomeProvider/

注意:android提供的contentprovider可能沒有徹底限定的受權名,只有在使用第三方contentprovider時才建議使用徹底限定的受權名(如:comgoogle.android.comtacts)。

contentprovider還提供了一種相似REST的URL來獲取或操做數據。對於前面的註冊,標識NotePadProvider數據庫中的筆記目錄或集合的URI爲:

content://com.google.provider.Notepad/Notes

標識具體筆記的URI爲:

content://com.google.provider.notepd/Notes/#

一些非第三方提供程序,由android控制的,非徹底限定的結構:

content://media/internal/imaes
content://media/external/images 
content://contacts/people 
content://contacts/people/23

ContenProvider具備web服務的特徵。ContenProvider經過其URI內部數據公開爲服務。可是,contentprovider的URL的輸出不是具備特定類型的數據,這與基於SOAP的web服務同樣。此輸出更像來自JDBC語句的結果集。儘管contentprovider在概念上JDBC類似輸出ResultSet不徹底相同

調用方但願知道返回的行和列的結構。contentprovider提供了一種內置機制,來肯定此URI所表示的數據的MIME

相關文章
相關標籤/搜索