12.1.1. 定义URI
12.1.1.定义URI
程序内部的不同对象可以通过变量名相互引用,因为它们共享着同一个地址空间。但是不同程序的地址空间是相互隔离的,要引用对方的对象,就需要某种额外的机制。Android对此的解决方案就是全局资源标识符(Uniform Resource Identifier,URI),使用一个字符串来表示Content Provider以及其中资源的位置。每个URI由三或四个部分组成,如下:
URI的各个部分
content://com.marakana.yamba.statusprovider/status/47
A B C D
- A部分,总是content://,固定不变。
- B部分,con.marakana.yamba.provider,称作"典据"(authority)。通常是类名,全部小写。这个典据必须与我们在Manifest文件中的声明相匹配。
- C部分,status,表示对应数据的类型。它可以由任意/分隔的单词组成。
- D部分,47,表示对应条目的ID,此项可选。如果忽略,则表示数据的整个集合。
有时需要引用整个Content Provider,那就忽略D部分;有时只需要其中一项,那就保留D部分,指明对应的条目。另外我们这里只有一个表,因此C部分是可以省略的。
如下是定义常量:
public static final Uri CONTENT_URI = Uri
.parse("content://com.marakana.yamba7.statusprovider");
public static final String SINGLE_RECORD_MIME_TYPE =
"vnd.android.cursor.item/vnd.marakana.yamba.status";
public static final String MULTIPLE_RECORDS_MIME_TYPE =
"vnd.android.cursor.dir/vnd.marakana.yamba.mstatus";
关于这两个MIME类型,我们将在后面“获取数据类型”一节中详细讨论。还要在类里定义一个statusData对象,方便以后引用它。
StatusData statusData;
加入这个statusData对象,是因为数据库的访问都统一到了StatusProvider这个类中。