【问题标题】:Class structure for a ContentProvider having multiple sub tables具有多个子表的 ContentProvider 的类结构
【发布时间】:2010-02-16 23:31:20
【问题描述】:

ContentProvider 文档说要在 AndroidManifest 中为您的 ContentProvider 类创建一个条目。如果您的类支持多个子表,则必须为每个子表声明一个 CONTENT_URI 常量。如何?除非您为每个子表进行子类化,否则您不能这样做。为什么不只拥有多个提供商?

您是否将子表提供程序实现为后代?有多个子表,还是只有一个 ContentProvider 类?

如您所见,我对文档感到困惑。上面写着:

定义一个名为 CONTENT_URI。这是字符串 表示完整的内容:URI 您的内容提供商处理。你 必须为此定义一个唯一的字符串 价值。最好的解决方案是使用 的完全限定的类名 内容提供者(小写)。所以, 例如,一个 URI TransportationProvider 类可以是 定义如下:

public static final Uri CONTENT_URI = 
               Uri.parse("content://com.example.codelab.transporationprovider");

如果提供者有子表,还要为每个子表定义 CONTENT_URI 常量。这些 URI 都应该具有相同的权限(因为它标识了内容提供者),并且仅通过它们的路径来区分。例如:

content://com.example.codelab.transporationprovider/train 
content://com.example.codelab.transporationprovider/air/domestic 
content://com.example.codelab.transporationprovider/air/international

那么,我们创建了多少类来处理火车、航空/国内和航空/国际?

【问题讨论】:

    标签: android android-contentprovider


    【解决方案1】:

    如果您的班级支持多个 子表那么必须有一个 声明的 CONTENT_URI 常量 每个。如何?你不能这样做,除非 每个子表的子类。

    那么,不要将它们全部命名为CONTENT_URI。无论如何,该名称对第三方来说并不是非常有用,因为他们无法访问您的源代码来访问该静态数据成员。文档也让我感到困惑,我什至在我的一本书中模仿了他们的说明,但我正在远离它,并将修改我的材料以匹配。

    更好的地方是他们自己的内容提供商(ContactsContractCallLog 等)。

    你实现分表了吗 提供者作为后代?和 多个子表,还有 只有一个 ContentProvider 类?

    有多少你想要多少。您可以使用单个类或内部类(请参阅ContactsContract)或其他方式来完成。

    【讨论】:

    • 啊,明白了!看到文档谈论 CONTENT_URI 时我感到非常惊讶,就好像它被反射或其他东西以某种方式识别一样,但我想即使那也是不可能的。那么用户如何发现 CONTENT_URI 的实际值呢?来自外部文档?
    • 是的。你只需要告诉他们使用什么价值。 Android 操作系统有一个优势:每个人都可以访问它。第三方内容提供商就没那么幸运了。这也意味着您最好坚持使用您选择的任何名称,或使用一些版本控制(例如,架构的 v1 的原始名称,v2 的不同名称)。
    猜你喜欢
    • 2012-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多