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