android Databases android Databases

Java代码  收藏代码
  1. public static final UriMatcher uriMatcher;  
  2.     static {  
  3.         uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);  
  4.         uriMatcher.addURI(Book.AUTHORITY, "item", Book.ITEM);  
  5.         uriMatcher.addURI(Book.AUTHORITY, "item/#", Book.ITEM_ID);  
  6.     }  


这里UriMatcher类型的静态字段是用来匹配传入到ContentProvider中的Uri的类。其构造方法传入的匹配码是使用match()方法匹配根路径时返回的值,这个匹配码可以为一个大于零的数表示匹配根路径或传入-1,即常量UriMatcher.NO_MATCH表示不匹配根路径。addURI()方法是用来增加其他URI匹配路径的,第一个参数传入标识ContentProvider的AUTHORITY字符串。第二个参数传入需要匹配的路径,这里的#代表匹配任意数字,另外还可以用*来匹配任意文本。第三个参数必须传入一个大于零的匹配码,用于match()方法对相匹配的URI返回相对应的匹配码。 

例子: 
Java代码  收藏代码
  1. @Override  
  2.     public String getType(Uri uri) {  
  3.         // TODO Auto-generated method stub  
  4.         System.out.println(" BookProvider getType...");  
  5.         int code = uriMatcher.match(uri);  
  6.         switch (code) {  
  7.         case Book.ITEM:  
  8.             System.out.println(" BookProvider getType..." +Book.CONTENT_TYPE);  
  9.             return Book.CONTENT_TYPE;  
  10.         case Book.ITEM_ID:  
  11.             System.out.println(" BookProvider getType..." +Book.CONTENT_ITEM_TYPE);  
  12.             return Book.CONTENT_ITEM_TYPE;  
  13.         default:  
  14.             throw new IllegalArgumentException("Unknown URI " + uri);  
  15.         }  
  16.     }  

分享到:  
评论
4 楼 TsuiRay 2011-08-05  
tiantianhappy 写道
能问你一个问题吗?为什么 uriMatcher.addURI(Book.AUTHORITY, "item", Book.ITEM);  
而不是 uriMatcher.addURI(Book.AUTHORITY, "/item", Book.ITEM); 
api上是有/的,能解释一下吗?

最新的API是不能写"/"的,应该是版本升级后,API没有及时更新.
3 楼 steveking1987 2011-04-03  
貌似不能加,加了/反而找不到相对应的表了
2 楼 追求幸福 2011-02-14  
tiantianhappy 写道
能问你一个问题吗?为什么 uriMatcher.addURI(Book.AUTHORITY, "item", Book.ITEM);  
而不是 uriMatcher.addURI(Book.AUTHORITY, "/item", Book.ITEM); 
api上是有/的,能解释一下吗?

我的理解是:addURL的第二个参数是path,就是比对uri中path的部分,不管你加不加都会自动从根目录/开始匹配,所以加不加都不影响。若是你的数据不是存在于/下,那你就要加*/(
*/item).若我有什么地方说得不对,请指正。谢谢!
1 楼 tiantianhappy 2011-02-13  
能问你一个问题吗?为什么 uriMatcher.addURI(Book.AUTHORITY, "item", Book.ITEM);  
而不是 uriMatcher.addURI(Book.AUTHORITY, "/item", Book.ITEM); 
api上是有/的,能解释一下吗?
原文地址:https://www.cnblogs.com/tfy1332/p/3658123.html