- public static final UriMatcher uriMatcher;
- static {
- uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
- uriMatcher.addURI(Book.AUTHORITY, "item", Book.ITEM);
- uriMatcher.addURI(Book.AUTHORITY, "item/#", Book.ITEM_ID);
- }
这里UriMatcher类型的静态字段是用来匹配传入到ContentProvider中的Uri的类。其构造方法传入的匹配码是使用match()方法匹配根路径时返回的值,这个匹配码可以为一个大于零的数表示匹配根路径或传入-1,即常量UriMatcher.NO_MATCH表示不匹配根路径。addURI()方法是用来增加其他URI匹配路径的,第一个参数传入标识ContentProvider的AUTHORITY字符串。第二个参数传入需要匹配的路径,这里的#代表匹配任意数字,另外还可以用*来匹配任意文本。第三个参数必须传入一个大于零的匹配码,用于match()方法对相匹配的URI返回相对应的匹配码。
例子:
- @Override
- public String getType(Uri uri) {
- // TODO Auto-generated method stub
- System.out.println(" BookProvider getType...");
- int code = uriMatcher.match(uri);
- switch (code) {
- case Book.ITEM:
- System.out.println(" BookProvider getType..." +Book.CONTENT_TYPE);
- return Book.CONTENT_TYPE;
- case Book.ITEM_ID:
- System.out.println(" BookProvider getType..." +Book.CONTENT_ITEM_TYPE);
- return Book.CONTENT_ITEM_TYPE;
- default:
- throw new IllegalArgumentException("Unknown URI " + uri);
- }
- }
评论
而不是 uriMatcher.addURI(Book.AUTHORITY, "/item", Book.ITEM);
api上是有/的,能解释一下吗?
最新的API是不能写"/"的,应该是版本升级后,API没有及时更新.
而不是 uriMatcher.addURI(Book.AUTHORITY, "/item", Book.ITEM);
api上是有/的,能解释一下吗?
我的理解是:addURL的第二个参数是path,就是比对uri中path的部分,不管你加不加都会自动从根目录/开始匹配,所以加不加都不影响。若是你的数据不是存在于/下,那你就要加*/(
*/item).若我有什么地方说得不对,请指正。谢谢!
而不是 uriMatcher.addURI(Book.AUTHORITY, "/item", Book.ITEM);
api上是有/的,能解释一下吗?