2

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

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

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

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

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

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

4

1 回答 1

3

如果您的类支持多个子表,则必须为每个子表声明一个 CONTENT_URI 常量。如何?除非您为每个子表进行子类化,否则您不能这样做。

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

更好的查看位置是他们自己的内容提供者(ContactsContractCallLog等)。

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

有尽可能多的。您可以使用单个类或内部类(请参阅 参考资料ContactsContract)或其他任何方式来实现。

于 2010-02-17T00:17:18.437 回答