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

相关文章
相关标签/搜索