具有多个子表的ContentProvider的类结构

时间:2010-02-16 23:31:21

标签: android android-contentprovider

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

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

正如您所看到的,我对文档感到困惑。它写着:

  

定义名为的公共静态最终Uri   CONTENT_URI。这是字符串   表示完整内容:URI   您的内容提供商处理。您   必须为此定义一个唯一的字符串   值。最好的解决方案是使用   完全限定的类名   内容提供者(小写)。所以,   例如,a的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

那么,我们为了处理火车,空中/国内和国际/国际航空而创造了多少个班级?

1 个答案:

答案 0 :(得分:3)

  

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

然后不要将它们全部命名为CONTENT_URI。无论如何,该名称对第三方来说并不十分有用,因为他们无法访问您的源代码来访问该静态数据成员。文档也让我感到困惑,我甚至在我的一本书中唠叨了他们的指示,但我正在远离那些,并将改进我的材料以匹配。

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

  

您是否实施了子表   提供者作为后代?同   多个子表,还有   只有一个ContentProvider类?

拥有您想要的任意数量。您可以使用单个类或内部类(请参阅ContactsContract)或其他任何内容来执行此操作。