URI的格式:
(1)content://comple.app.provider/table:期望访问com.example.app应用中table表中数据。
(2)content://comple.app.provider/table/1:期望访问com.example.app应用中table表中id为1的数据。
通配符:
(1)*:匹配任意长度的任意字符。
(2)#:匹配任意长度的数字。
UriMatcher类——匹配内容Uri功能
- addURI()方法:参数:authority、path、自定义代码。
- match()方法:参数:Uri对象,返回值:该对象对应的自定义代码。
创建内容提供器:
- 新建一个类MyProvider去继承ContentProvider类。
ContentProvider的六个抽象方法:
- onCreat():初始化内容提供器时调用,在这里完成对数据库的创建和升级。
- query():从内容提供器中查询数据,查询结果存Cursor对象中返回。
- insert():添加一条数据。参数:uri—表,values—待添加数据。返回一个URI。
- update():更新数据。返回值:受影响行数。
- delect():删除数据。返回值:被删除的行数。
- getType():根据传入内容的URI返回相应的MIME类型。
抽象方法的使用:
(1)query()、insert()、update()、delete()这四种方法的实现类似,以query()方法为例,代码如下:
public final static int TABLE1_DIR = 0;
public final static int TABLE1_ITEM= 1;
public final static int TABLE2_DIR = 2;
public final static int TABLE2_ITEM= 3;
private static UriMatcher uriMatcher;
static {
uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
uriMatcher.addURI("com.example.app.provider","table1",TABLE1_DIR);
uriMatcher.addURI("com.example.app.provider","table1/#",TABLE1_ITEM);
uriMatcher.addURI("com.example.app.provider","table2",TABLE2_DIR);
uriMatcher.addURI("com.example.app.provider","table2/#",TABLE2_ITEM);
}
@Override
public Cursor query(Uri uri, String[] strings, String s, String[] strings1, String s1) {
switch (uriMatcher.match(uri)){
case TABLE1_DIR:
//查询table1表中所有数据
break;
case TABLE1_ITEM:
//查询table1表中单条数据
break;
case TABLE2_DIR:
//查询table2表中所有数据
break;
case TABLE2_ITEM:
//查询table2表中单条数据
break;
default:break;
}
return null;
}
(2)getType()方法:一个内容的URI对应的MIME字符由三部分组成
- 必须以vnd开头。
- URI以路径结尾,后接android.cursor.dir/;URI以id结尾,后接android.cuosor.item/。
- 最后接上
。vnd.<authority>.<path>
@Override
public String getType( Uri uri) {
switch (uriMatcher.match(uri)){
case TABLE1_DIR:
return "vnd.android.cursor.dir/vnd.com.example.app.provider.table1";
case TABLE1_ITEM:
return "vnd.android.cursor.item/vnd.com.example.app.provider.table1/#";
case TABLE2_DIR:
return "vnd.android.cursor.dir/vnd.com.example.app.provider.table2";
case TABLE2_ITEM:
return "vnd.android.cursor.item/vnd.com.example.app.provider.table2";
default:break;
}
return null;
}
此时,内容提供器创建完成!!!