Android UriMatcher无法识别模式

Android UriMatcher无法识别模式,android,uri,android-contentprovider,Android,Uri,Android Contentprovider,我在我的ContentProvider中匹配URI时遇到问题。它将用一个或两个“标记”匹配路径(不确定正确的术语是什么),例如,它可以识别box/#。但是,一旦我添加第二个标记,例如box/#/item,我就会抛出一个InvalidArgumentException,我的应用程序就会崩溃。我在这里读过几个帖子,这个问题有时可以通过更改添加到UriMatcher的uri的顺序来解决;我试过了,但没用。有人知道问题出在哪里吗?我在下面摘录了代码的相关部分 从我的内容提供者: private stat

我在我的
ContentProvider
中匹配URI时遇到问题。它将用一个或两个“标记”匹配路径(不确定正确的术语是什么),例如,它可以识别
box/#
。但是,一旦我添加第二个标记,例如
box/#/item
,我就会抛出一个
InvalidArgumentException
,我的应用程序就会崩溃。我在这里读过几个帖子,这个问题有时可以通过更改添加到
UriMatcher
的uri的顺序来解决;我试过了,但没用。有人知道问题出在哪里吗?我在下面摘录了代码的相关部分

从我的
内容提供者

private static final String AUTHORITY = "com.example.boxdatabase.DatabaseProvider";
// Type of query
public static final int BOXES = 100;
    ...

public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY);
    ...

// URI Matcher for queries
private static final UriMatcher sURIMatcher = new UriMatcher(UriMatcher.NO_MATCH);
static {
    sURIMatcher.addURI(AUTHORITY, "box/#/item", BOX_ITEM);
    sURIMatcher.addURI(AUTHORITY, "box/#/item/#", BOX_ITEM_ID);
    sURIMatcher.addURI(AUTHORITY, "box", BOXES);
    sURIMatcher.addURI(AUTHORITY, "box/#", BOXES_ID);
    sURIMatcher.addURI(AUTHORITY, "item", ITEMS);
    sURIMatcher.addURI(AUTHORITY, "item/#", ITEMS_ID);
}
我尝试访问我的
ContentProvider
但失败的示例:

return new CursorLoader(this, Uri.withAppendedPath(
                DatabaseProvider.CONTENT_URI, "box/" + boxId + "/item"),
                DatabaseContract.BoxItemEntry.ALL_COLUMNS, null, null, null);
试试这个:

sURIMatcher.addURI(AUTHORITY, "box", BOXES);
sURIMatcher.addURI(AUTHORITY, "box/#", BOXES_ID);
sURIMatcher.addURI(AUTHORITY, "box/#/item", BOX_ITEM);
sURIMatcher.addURI(AUTHORITY, "box/#/item/#", BOX_ITEM_ID);
sURIMatcher.addURI(AUTHORITY, "item", ITEMS);
sURIMatcher.addURI(AUTHORITY, "item/#", ITEMS_ID);
顺序很重要,请阅读我的解释: 试试这个:

sURIMatcher.addURI(AUTHORITY, "box", BOXES);
sURIMatcher.addURI(AUTHORITY, "box/#", BOXES_ID);
sURIMatcher.addURI(AUTHORITY, "box/#/item", BOX_ITEM);
sURIMatcher.addURI(AUTHORITY, "box/#/item/#", BOX_ITEM_ID);
sURIMatcher.addURI(AUTHORITY, "item", ITEMS);
sURIMatcher.addURI(AUTHORITY, "item/#", ITEMS_ID);
顺序很重要,请阅读我的解释:

您能显示堆栈跟踪和抛出异常的代码行吗?我自己抛出异常。我在
query()
方法中有一个开关大小写,结果是
matchUri
;默认情况下(URI匹配失败)是通过
InvalidArgumentException
。能否显示堆栈跟踪以及哪行代码引发异常?我自己引发异常。我在
query()
方法中有一个开关大小写,结果是
matchUri
;默认情况下(URI匹配失败)是通过
InvalidArgumentException
。我解决了我的问题,它与
UriMatcher
无关。然而,这是非常有益的,所以我将继续并接受它作为我的答案。希望其他人会发现这很有用!Can
addURI(权限,“项目”,项目)放在
addURI之后(权限,“框”,框)?我解决了我的问题,它与
UriMatcher
无关。然而,这是非常有益的,所以我将继续并接受它作为我的答案。希望其他人会发现这很有用!Can
addURI(权限,“项目”,项目)放在
addURI之后(权限,“框”,框)