UriMatcher不承认格局 [英] UriMatcher not recognizing pattern
问题描述
我在与匹配的URI的麻烦我的的ContentProvider
。它将匹配一个或两个标签路径(不知道正确的说法是什么),例如,它可以识别盒/#
。但只要我添加第二个标记,例如盒/#/项目
,我抛出一个 InvalidArgumentException
和我的应用程序崩溃。我在这里上的多个线程,这个问题有时可以通过改变URI的顺序来解决添加到 UriMatcher
阅读;我想这一点,但无济于事。任何人都知道是什么问题?我摘录如下我的code的相关部分。
从我的ContentProvider
:
私有静态最后弦乐AUTHORITY =com.example.boxdatabase.DatabaseProvider;
//查询类型
公共静态最终诠释BOXES = 100;
...公共静态最终乌里CONTENT_URI = Uri.parse(内容://+ AUTHORITY);
...// URI匹配器进行查询
私有静态最终UriMatcher sURIMatcher =新UriMatcher(UriMatcher.NO_MATCH);
静态的 {
sURIMatcher.addURI(权威盒/#/项,BOX_ITEM);
sURIMatcher.addURI(权威盒/#/项目/#,BOX_ITEM_ID);
sURIMatcher.addURI(权威,盒子,箱);
sURIMatcher.addURI(权威,盒子/#,BOXES_ID);
sURIMatcher.addURI(权威项目,项目);
sURIMatcher.addURI(权威项目/#,ITEMS_ID);
}
在那里我试图访问一个例子我的的ContentProvider
和失败:
返回新CursorLoader(这一点,Uri.withAppendedPath(
DatabaseProvider.CONTENT_URI,盒子/+ boxId +/项目),
DatabaseContract.BoxItemEntry.ALL_COLUMNS,NULL,NULL,NULL);
试试这个:
sURIMatcher.addURI(权威,盒子,箱);
sURIMatcher.addURI(权威,盒子/#,BOXES_ID);
sURIMatcher.addURI(权威盒/#/项,BOX_ITEM);
sURIMatcher.addURI(权威盒/#/项目/#,BOX_ITEM_ID);
sURIMatcher.addURI(权威项目,项目);
sURIMatcher.addURI(权威项目/#,ITEMS_ID);
的顺序,在这里看我的解释是很重要的:
http://stackoverflow.com/a/15015687/534471
I'm having trouble with matching URIs in my ContentProvider
. It will match paths with one or two "tags" (not sure what the correct term is), for example it can recognize box/#
. But as soon as I add a second tag, for example box/#/item
, I throw an InvalidArgumentException
and my app crashes. I've read in several threads on here that this issue can sometimes be solved by changing the order of the URIs added to the UriMatcher
; I tried this, but to no avail. Anyone know what the problem is? I've excerpted relevant parts of my code below.
From my ContentProvider
:
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);
}
An example of where I try to access my ContentProvider
and it fails:
return new CursorLoader(this, Uri.withAppendedPath(
DatabaseProvider.CONTENT_URI, "box/" + boxId + "/item"),
DatabaseContract.BoxItemEntry.ALL_COLUMNS, null, null, null);
Try this:
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);
The order is important, read my explanations here: http://stackoverflow.com/a/15015687/534471
这篇关于UriMatcher不承认格局的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!