文档章节

ContentProvider

刘小米_思聪
 刘小米_思聪
发布于 2014/11/15 22:01
字数 915
阅读 232
收藏 0

    android使用一种称为contentprovider的概念来将数据抽象为服务。

    这种内容提供给程序的理念看起来像是启用了REST的数据提供程序。REST(REpresentational State Transfer具象状态传输),它是一种设计风格,通常基于使用HTTP,URI和XML以及HTML这些现有的广泛流行的协议和标准。资源由URI指定,对资源的操作包括获取,创建,修改和删除资源;这些操作正好对应HTTP协议提供的GET,POST和DELETE方法。

    要从ContentProvider检索数据或将数据保存到Contentprovider,需要使用一组类似REST的URI。

例如,如果要从封装 图书数据库 的contentprovider获取一组图书,需要使用类似以下形式的URI:

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

要从 图书数据库 获得指定图书(如23号图书),需要使用类似以下形似的URI:

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

    设备上的任何应用程序都可以利用这些URI来访问或操作数据。所以,在应用程序之间数据共享上,ContentProvider扮演着重要角色。

    只有希望与外部或在应用程序之间 共享数据时,才需要使用contentprovider.

    对于内部数据访问,应用程序可以使用它认为适合的任何数据存储/访问机制,例如:

        首选项,一组键/值对,可以用来存储应用程序首选项。

        文件,应用程序内部的文件,可以存储在可移动存储媒体上。

        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


© 著作权归作者所有

刘小米_思聪
粉丝 58
博文 60
码字总数 43955
作品 0
西安
其他
私信 提问
一图解惑之Android调用ContentProvider基本流程

准备 基本使用 ContentProvider作为四大组件之一,在开发过程中经常被使用到。我们的常规做法是定义一个ContentProvider,然后在使用的时候使用ContentResolver提供的接口来访问数据。一个进...

Catsuo
2018/01/10
0
0
[Android] ContentProvider和Uri详解

一、使用ContentProvider(内容提供者)共享数据 ContentProvider在android中的作用是对外共享数据,也就是说你可以通过ContentProvider把应用中的数据共享给其他应用访问,其他应用可以通过...

枫兮兮
2014/03/03
72
0
VirtualApk源码分析-ContentProvider插件化

android通过ContentProvider可以实现进程间的数据共享,例如APP通过MediaProvider可以访问多媒体数据库的内容。通常我们在Activity通过getContentResolver().query来跨进程访问数据库,Conte...

jasmine_ben
2018/05/20
0
0
一图解惑之Android管理ContentProvider结构

准备 在上图之前还是先简单总结下相关的数据结构类。 在Framework中可以理解为一个ContentProviderRecord对应应用层中的一个ContentProvider,主要的数据结构类和其相关的成员变量在下面简要...

Catsuo
2018/01/10
0
0
ContentProvider和Uri详解

问题引出: "/getScrollData" 的使用, public static final Uri INBOXCONTENTURI_SCROLLDATA = Uri .parse("content://" + SMSCONFIGAUTHORITY + "/" + SMSINBOXTABLE_NAME + "/getScrollDa......

eric_zhang
2012/03/23
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
今天
1K
12
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
今天
33
0
计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
33
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
46
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
17
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部