ContentProvider 共享数据
onCreate 其它应用第一次访问时被调。
insert 外部应用使用此方法添加数据。
delete 外部应用使用此方法删除数据。
update 外部应用使用此方法更新数据。
query 外部应用使用此方法查询数据。
getType 主要用于匹配数据类型(例如:接收系统广播时传递的数据类型),返回当前Uri所代表数据的MIME类型。如果操作的数据属于集合类型,那么MIME类型字符串应该以vnd.android.cursor.dir/自定义类型。数据属于非集合类型数据,应该返回vnd.android.cursor.item/自定义类型。
UriMatcher 用于匹配Uri
UriMatcher类用于匹配Uri,它的用法如下:
首先第一步把你需要匹配Uri路径全部给注册上,如下:
//常量 UriMatcher.NO_MATCH 表示不匹配任何路径的返回码 UriMatcher sMatcher = new UriMatcher(UriMatcher.NO_MATCH); //如果match()方法匹配content://cn.loaderman.provider.personprovider/person路径,返回匹配码为1 sMatcher.addURI(“cn.loaderman.provider.personprovider”, “person”, 1);//添加需要匹配uri,如果匹配就会返回匹配码 //如果match()方法匹配content://cn.loaderman.provider.personprovider/person/230路径,返回匹配码为2 sMatcher.addURI(“cn.loaderman.provider.personprovider”, “person/#”, 2);//#号为通配符 switch (sMatcher.match(Uri.parse("content://cn.loaderman.provider.personprovider/person/10"))) { case 1 break; case 2 break; default://不匹配 break; }
注册完需要匹配的Uri后,就可以使用sMatcher.match(uri)方法对输入的Uri进行匹配,如果匹配就返回匹配码,匹配码是调用addURI()方法传入的第三个参数,假设匹配content://cn.loaderman.provider.personprovider/person路径,返回的匹配码为1
ContentUris 获取和添加Uri信息
ContentUris类用于获取Uri路径后面的ID部分,它有两个比较实用的方法:
withAppendedId(uri, id)用于为路径加上ID部分:
Uri uri = Uri.parse("content://cn.loaderman.provider.personprovider/person") Uri resultUri = ContentUris.withAppendedId(uri, 10); //生成后的Uri为:content://cn.loaderman.provider.personprovider/person/10 parseId(uri)方法用于从路径中获取ID部分: Uri uri = Uri.parse("content://cn.loaderman.provider.personprovider/person/10") long personid = ContentUris.parseId(uri);//获取的结果为:10 另外Uri类中还有一个静态方法withAppendedPath(baseUri, pathSegment)也可以在某个路径上继续添加路径: Uri uri = Uri.parse("content://cn.loaderman.provider.personprovider/person") Uri resultUri = Uri.withAppendedPath(uri, “update”); // 生成后的Uri为: content://cn.loaderman.provider.personprovider/person/update
最后,关注【码上加油站】微信公众号后,有疑惑有问题想加油的小伙伴可以码上加入社群,让我们一起码上加油吧!!!