Android UriMatcher 不匹配通配符

标签 android regex android-contentprovider

我有一个 ContentProvider,我需要匹配一些包含 UUID 作为通配符的 URI

来自 ContentProvider 的 UriMatcher:

public static final Uri CONTENT_URI_NOTIFICATIONS = Uri.parse("content://" + AUTHORITY + "/" + BASE_PATH_NOTIFICATIONS);
public static final Uri CONTENT_URI_USERS  = Uri.parse("content://" + AUTHORITY + "/" + BASE_PATH_USERS);

private static final int NOTIFICATIONS = 40;
private static final int USER_ID = 70;

private static final UriMatcher sURIMatcher = new UriMatcher(UriMatcher.NO_MATCH);

static
{
    sURIMatcher.addURI(AUTHORITY, BASE_PATH_NOTIFICATIONS, NOTIFICATIONS);
    sURIMatcher.addURI(AUTHORITY, BASE_PATH_USERS + "/*", USER_ID);
}

NOTIFICATIONS 的查询代码:

 Uri uri = Uri.parse(String.valueOf(MyContentProvider.CONTENT_URI_NOTIFICATIONS));
 return new CursorLoader(getActivity(), uri, projection, null, null, null);

USER_ID 的查询代码:

String userId = "73279386-5459-4316-9ff9-7c6b7b84029a";
Uri uri = Uri.parse(MyContentProvider.CONTENT_URI_USERS + "/" + userId);
return new CursorLoader(getActivity(), uri, projection, null, null, null);

从上面的 UriMatcher 来看,NOTIFICATIONS URI 匹配,但 USER_ID 不匹配。知道这里有什么问题吗?值得注意的是,当我曾经使用整数而不是 UUID 来表示用户并且曾经在 UriMatcher 中使用 # 而不是 * 时,一切都按预期工作。切换到通配符后,匹配器停止匹配包含 UUID 的 URI。

最佳答案

显然,您添加 URI 的顺序很重要。如果您进行如下设置,USER_DETAILS 将不再被识别。您必须调换顺序并先添加 USER_DETAILS。

sURIMatcher.addURI(AUTHORITY, BASE_PATH_USERS + "/*", USER_ID);
sURIMatcher.addURI(AUTHORITY, BASE_PATH_USERS + "/details", USER_DETAILS);

关于Android UriMatcher 不匹配通配符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30446481/

相关文章:

android - 如何更改 Material slider 字体

android - 尝试订阅产品时需要应用内计费android返回身份验证

java - 如何阅读管道分隔线 |来自一个文件并在两个不同的 ArrayList 中拆分整数

regex - Bash 中不区分大小写的条件

android - 暂停时从服务更新 Activity 数据

android - 如何在 Android 中使用 Content Provider 共享数据

android - 从以前的 ListView 打开一个新的 ListView

android - 发布您的 Android 应用

JAVA 正则表达式 : Match until the specific character

sql - 在自定义 ContentProvider 函数中过滤输入