android.content.UriMatcher的含义

2022-09-02 23:17:50

什么是 Uri Matcher 在android.content.UriMatcher

如何使用它?有人可以解释一下以下三行代码的含义吗?

  uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
  uriMatcher.addURI(PROVIDER_NAME, "cte", uriCode);
  uriMatcher.addURI(PROVIDER_NAME, "cte/*", uriCode);
  int res = uriMatcher.match(uri);

答案 1

UriMatcher 是一个方便的类,当您编写 ContentProvider 或其他需要响应多个不同 URI 的类时。在您的示例中,用户可以使用 URI 查询您的提供商,例如:

myprovider://cte

myprovider://cte/somestring

构造 UriMatcher 时,需要为每个 URI 设置单独的代码(而不仅仅是示例中的“uriCode”)。我通常使我的UriMatcher实例成为静态的,并将URI添加到静态构造函数中:

private static final int CTE_ALL = 1;
private static final int CTE_FIND = 2;
private static final UriMatcher uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
static {
    uriMatcher.addURI(PROVIDER_NAME, "cte", CTE_ALL);
    uriMatcher.addURI(PROVIDER_NAME, "cte/*", CTE_FIND);
}

然后在 ContentProvider 中,您可以在查询方法中执行如下操作:

Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
    int res = uriMatcher.match(uri);
    switch (res) {
        case CTE_ALL:
            //TODO create a results Cursor with all the CTE results
            break;
        case CTE_FIND:
            //TODO create a results Cursor with the single CTE requested
            break;
    }
    return results;
}

答案 2

我发现以下视频很有用:

URI 基础知识

URI 匹配器

从本质上讲,您要做的是,将ID或数字与不同的URI相关联。使用 addUri 时,将针对 URI 创建代码/数字/ID。请求 match() 时,将返回相应的代码。


推荐