2013-07-10 21 views
21

我在互联网上观看了关于ContentProvider的课程,演示了如何定义和使用ContentProvidergetContentResolver()如何工作?

我感到困惑使用名为getContentResolver()方法。这种方法返回什么?

ContentProvider不是实例化和代码只是写道:getContentProvider().query()

我不明白ContentProvider是如何工作的。

+2

也许寻找它的来源将帮助? – azizbekian

回答

48

它返回内容解析器。


什么是内容解析器?

内容解析器是应用程序的单一的全球实例,提供访问您(和其他应用程序的)内容提供商。 Content Resolver的行为完全如其名称所暗示的那样:它接受来自客户端的请求,并通过将其指向具有不同权限的内容提供者来解决这些请求。要做到这一点,内容解析器会将权限映射到内容提供者。这种设计很重要,因为它允许访问其他应用程序的内容提供者的简单而安全的方式。

内容解析器包括CRUD(创建,读取,更新,删除)对应于内容提供者类的抽象方法(插入,删除,查询,更新)的方法。内容解析器不知道它与之交互的内容提供者的实现(也不需要知道);每个方法都被传递一个指定要与之交互的内容提供者的URI。


什么是内容提供者?

鉴于内容解析器提供了从该应用程序的内容提供者的抽象,内容提供商提供了从基础数据源(即SQLite database)的抽象。它们提供了定义数据安全性的机制(即通过强制执行读/写权限)并提供一个标准接口,将一个进程中的数据与另一个进程中运行的代码连接起来。

内容提供商提供发布和使用的数据提供一个接口,周围使用content:// schema简单URI寻址模式为基础。它们使您能够将应用程序层与底层数据层分离,通过抽象底层数据源使您的应用程序数据源不可知。

来源 - androiddesignpatterns

+1

非常感谢 – Kross

1

getContentResolver()为你的应用程序的包返回一个ContentResolver的实例。

从developer.android.com粘贴

内容提供商管理访问结构化的数据集。它们封装数据,并提供定义数据安全性的机制。内容提供者是将一个进程中的数据与另一个进程中运行的代码连接起来的标准接口。

当您想要访问内容提供者中的数据时,可以使用应用程序的Context中的ContentResolver对象作为客户端与提供者进行通信。 ContentResolver对象与提供者对象通信,提供者对象是一个实现ContentProvider的类的实例。提供程序对象接收来自客户端的数据请求,执行请求的操作并返回结果。

http://developer.android.com/guide/topics/providers/content-providers.html

相关问题