【问题标题】:UriMatcher not recognizing patternUriMatcher 无法识别模式
【发布时间】:2013-06-02 03:38:33
【问题描述】:

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

来自我的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);
}

我尝试访问我的 ContentProvider 并失败的示例:

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

【问题讨论】:

  • 能否显示堆栈跟踪以及哪行代码抛出异常
  • 我自己抛出异常。我在query() 方法中有一个switch-case,结果为matchUri;默认(URI 匹配失败)是处理InvalidArgumentException

标签: android uri android-contentprovider


【解决方案1】:

试试这个:

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);

顺序很重要,请在此处阅读我的解释: https://stackoverflow.com/a/15015687/534471

【讨论】:

  • 我发现了我的问题,它与UriMatcher 无关。但是,这是非常有用的信息,所以我会继续接受它作为我的答案。希望其他人会发现这很有用!
  • addURI(AUTHORITY, "item", ITEMS);可以放在addURI(AUTHORITY, "box", BOXES);之后吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-07
  • 2022-12-04
  • 1970-01-01
相关资源
最近更新 更多