【问题标题】:Understanding content provider and resolver了解内容提供者和解析器
【发布时间】:2014-01-06 13:26:51
【问题描述】:

我了解内容解析器接受来自客户的请求,并通过将这些请求定向到具有不同权限的内容提供者来解析这些请求。

我正在通过vogellas tutorial,特别是queryCalendar 方法,我注意到没有对内容提供程序的调用。我只看到 Content Resolver 的代码:
ContentResolver cr = getContentResolver();

为什么没有调用 Content Provider

【问题讨论】:

标签: java android android-contentresolver


【解决方案1】:

因为Content Provider是由Android系统自己实现的。如果你查看代码,你会看到这一点:

Uri uri = Calendars.CONTENT_URI;

在 Android 系统中,某处注册了一个 Content Provider 来处理对该 Uri 的 Content Provider 请求。

简而言之:如果您想将一些数据暴露给另一个应用程序(当然,没有人阻止您在您的应用程序中使用它),您只会面对内容提供者。然后,您需要实现自己的一个(并通过 Uri 公开它)。内容解析器是使用 Uri 与内容提供者对话的东西。

您还可以查看this Vogella tutorial 了解如何定义自己的内容提供程序。

【讨论】:

    【解决方案2】:

    您会看到对 ContentResolver 的调用,因为 ContentResolver 负责调用 ContentProvider 的方法并返回数据。

    写在official Android Guide on ContentProviders

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

    如果你想正确地学习 Content Providers,

    以下教程是了解如何正确实现 Content Providers 的最佳在线教程(以及官方 Android API Guide)。

    1. Content Provider Basics

    2. How to Use Existing Content Providers in your app

    3. How to write your own custom Content Providers

    这些教程帮助我对内容提供者有了深入的了解,我不再害怕它们了! :) 希望他们也能帮助你!

    附:完成 Content Providers 之后,您可能希望使用 Loaders 将来自 Content Providers 的数据加载到您的 UI 中。 official Android tutorial on Loaders 非常适合。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多