Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 具有多个子表的ContentProvider的类结构_Android_Android Contentprovider - Fatal编程技术网

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

Android 具有多个子表的ContentProvider的类结构,android,android-contentprovider,Android,Android Contentprovider,ContentProvider文档要求在AndroidManifest中为ContentProvider类创建一个条目。如果您的类支持多个子表,那么必须为每个子表声明一个CONTENT_URI常量。怎么用?除非为每个子表创建子类,否则不能这样做。为什么不拥有多个供应商 是否将子表提供程序实现为子体?对于多个子表,仍然只有一个ContentProvider类 如您所见,我对文档感到困惑。内容如下: 定义一个名为 内容URI。这就是 表示完整的内容:URI 您的内容提供商处理。你 必须为此定义唯一的

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

是否将子表提供程序实现为子体?对于多个子表,仍然只有一个ContentProvider类

如您所见,我对文档感到困惑。内容如下:

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

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

content://com.example.codelab.transporationprovider/train 
content://com.example.codelab.transporationprovider/air/domestic 
content://com.example.codelab.transporationprovider/air/international
那么,我们创建了多少类来处理火车、航空/国内和航空/国际

如果您的类支持多个 子表则必须有一个 为声明的CONTENT\u URI常量 每个怎么用?除非 您可以为每个子表创建子类

那么,不要将它们全部命名为
内容\u URI
。无论如何,这个名称对于第三方来说并不是非常有用,因为他们无权访问您的源代码来访问那个静态数据成员。这些文档也让我感到困惑,我甚至有点在我的一本书中鹦鹉学舌地重复他们的说明,但我正在远离这一点,并将修改我的材料以匹配它们

一个更好的地方是他们自己的内容提供商(
ContactsContract
CallLog
,等等)

您是否实现子表 作为后代的提供者?具有 多个子表,仍然有 只有一个ContentProvider类


你想要多少就有多少。您可以使用单个类或内部类(请参见
ContactsContract
)或其他任何内容来完成此操作。

啊,明白了!我很惊讶地看到文档谈论内容URI,好像是通过反射或其他方式识别出来的,但我想即使这样也不可能。那么,用户如何发现内容URI的实际值呢?从外部文件?是的。你只需要告诉他们使用什么价值。Android操作系统有一个优势:每个人都可以使用它。第三方内容提供商就没那么幸运了。这还意味着您最好坚持使用您选择的任何名称,或者使用一些版本控制(例如,模式v1的原始名称,v2的不同名称)。
content://com.example.codelab.transporationprovider/train 
content://com.example.codelab.transporationprovider/air/domestic 
content://com.example.codelab.transporationprovider/air/international