0

の URI の一致に問題がありますContentProvider。1 つまたは 2 つの「タグ」を持つパスに一致します (正しい用語が何であるかはわかりません)。たとえば、 を認識できbox/#ます。しかし、たとえばbox/#/item、2 番目のタグを追加するとすぐに がスロー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);
}

my にアクセスしようとしてContentProvider失敗する例:

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

1 に答える 1

4

これを試して:

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

于 2013-06-03T01:30:07.850 に答える