android.content.UriMatcher的含义

Mal*_*ngh 15 java android uri

什么是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);
Run Code Online (Sandbox Code Playgroud)

Bru*_*uce 36

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

myprovider://cte
Run Code Online (Sandbox Code Playgroud)

要么

myprovider://cte/somestring
Run Code Online (Sandbox Code Playgroud)

构造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);
}
Run Code Online (Sandbox Code Playgroud)

然后在您的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;
}
Run Code Online (Sandbox Code Playgroud)

  • @MarianPaździoch staitc 块在创建任何对象之前类被加载时被调用。这使得 uri 匹配器在加载类时准备工作.. (2认同)

adi*_*yah 5

我发现以下视频很有用:

URI基础知识

URI匹配器

实质上,您要做的是,拥有与不同URI相关联的ID或数字.使用addUri时,会根据URI创建代码/编号/ ID.当您请求匹配()时,将返回相应的代码.