`

UriMatcher

 
阅读更多
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);
		}
	}
分享到:
评论
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上是有/的,能解释一下吗?

相关推荐

    Android Uri

    首先,初始化 UriMatcher 对象:`UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH);` 其次,注册需要的 Uri:`matcher.addURI("com.yfz.Lesson", "people", PEOPLE);` 最后,与已经注册的 Uri 进行匹配...

    Android中ContentProvider的示例

    1. **定义UriMatcher**: UriMatcher是一个工具类,用于解析输入的Uri并返回匹配的代码。在ContentProvider中,我们需要为每种类型的操作(例如查询、插入、更新和删除)以及每个数据表定义一个唯一的代码。例如,...

    Android contentprovider总结

    UriMatcher uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); // 注册需要匹配的 URI uriMatcher.addURI("com.example.provider", "contact", 1); // 匹配 contact URI uriMatcher.addURI(...

    免费下载:android ContentProvider详细解析

    UriMatcher uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); uriMatcher.addURI("com.example.provider", "contact", 1); uriMatcher.addURI("com.example.provider", "contact/#", 2); ``` 这里 `#` 表示...

    ContentProvider使用详解

    private UriMatcher mUriMatcher = new UriMatcher(UriMatcher.NO_MATCH); static { mUriMatcher.addURI("com.ljq.providers.personprovider", "person", PERSON); mUriMatcher.addURI(...

    ContentProvider简介

    final UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH); matcher.addURI("com.itcast.provider.personprovider", "person", PERSONS); matcher.addURI("com.itcast.provider.personprovider", "person...

    06_contentprovider

    UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH); matcher.addURI("com.example.provider", "contacts", CONTACTS); matcher.addURI("com.example.provider", "contacts/#", CONTACTS_ID); return ...

    安卓ContentProvider详解例程

    UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH); matcher.addURI("com.example.myapp.provider", "mydata", 1); } ``` 3. **覆盖基本方法**:在ContentProvider的子类中,实现数据操作的方法,如:...

    ContentProvider 例子

    private static final UriMatcher MATCHER = new UriMatcher(UriMatcher.NO_MATCH); MATCHER.addURI("com.example.provider", "mydata", MY_DATA); ``` 这里,"mydata"是数据的表名,MY_DATA是匹配码。 4. **覆盖...

    简单实现自己的Content Provider(一)

    UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH); matcher.addURI("com.example.myapp.provider", "items", 1); ``` 2. **创建SQLite数据库**: 设计数据库表结构,创建SQLiteOpenHelper子类,实现`...

    android contentprovider使用示例

    - **定义UriMatcher**:创建UriMatcher对象,用于匹配不同的Uri请求,返回对应的操作码。 - **创建ContentProvider类**:继承ContentProvider,实现其生命周期方法,处理数据操作。 - **使用ContentResolver**:...

    contentprovider示例

    UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH); matcher.addURI("com.example.provider", "users", 1); // 插入、查询、更新、删除用户 ``` 2. 接着,实现ContentProvider的增删改查方法。例如,`...

    ContentProvider的快速上手策略

    UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH); matcher.addURI("com.example.myapp", "items", 1); // 匹配items路径 matcher.addURI("com.example.myapp", "items/#", 2); // 匹配单个item ``` ...

    contentprovider小demo

    3. **结构**:一个完整的ContentProvider包括四个核心组件:UriMatcher、SQLite数据库(或其他持久化存储)、ContentProvider类以及ContentResolver。 二、ContentProvider工作流程 1. **Uri匹配**:当其他应用想...

    ContentProvider实现数据库操作

    3. **URI匹配器(UriMatcher)**:为了将不同的Uri映射到对应的操作,我们需要使用UriMatcher。我们可以为每个数据操作定义一个独特的代码,然后在UriMatcher中添加规则。这样,当接收到Uri请求时,UriMatcher可以...

    ContentProviderDemo

    1. **定义UriMatcher**:UriMatcher是一个工具类,用于解析输入的Uri并匹配预定义的模式。通过添加代码如`UriMatcher.addURI("com.example.provider", "table_name", ID)`,我们可以设置不同的Uri模式来对应...

    自定义ContentProvider

    3. **UriMatcher**:为了处理不同的URI请求,我们需要使用UriMatcher。这个工具类可以根据传入的URI匹配预定义的模式,从而调用相应的方法。例如,为增删查改操作定义不同的码值,然后在ContentProvider中进行匹配。...

    自定义contentprovider

    private static final UriMatcher sUriMatcher = new UriMatcher(UriMatcher.NO_MATCH); sUriMatcher.addURI("com.example.myapp.provider", "my_table", MY_TABLE); ``` 5. 实现核心方法:根据上一步的Uri匹配结果...

    APP开发教程 Java Android移动端开发 13、Android数据存储和共享(二) 共25页.pptx

    UriMatcher允许开发者为不同的URI路径指定对应的代码,从而方便地匹配和处理请求。ContentUris则提供了处理URI中ID部分的便捷方法,如添加或解析ID,这对于处理具有特定ID的数据记录非常有用。 例如,如果我们有一...

    自定义ContentProvider完成数据交互

    private static final UriMatcher sUriMatcher = new UriMatcher(UriMatcher.NO_MATCH); static { sUriMatcher.addURI("com.example.myapp", "test_a", TEST_A); sUriMatcher.addURI("com.example.myapp", "test_...

Global site tag (gtag.js) - Google Analytics