ContentProvider
에 일치하는 URI가있는 데 문제가 있습니다. 하나 또는 두 개의 "태그"가있는 경로와 일치합니다 (정확한 용어가 무엇인지는 확실하지 않음). 예를 들어 box/#
을 인식 할 수 있습니다. 그러나 두 번째 태그 (예 : box/#/item
)를 추가하자마자 InvalidArgumentException
을 던지고 내 앱이 다운됩니다. 여기에 여러 스레드에서이 문제가 때때로 UriMatcher
에 추가 된 URI의 순서를 변경하여 해결할 수 있다고 읽었습니다. 나는 이것을 시도했지만 아무 소용이 없었다. 문제가 무엇인지 누구나 알고 있습니까? 나는 아래 코드의 일부를 발췌했다. 에서UriMatcher가 패턴을 인식하지 못합니다.
내 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);
당신은 스택 추적을 보여줄 수 있으며 어떤 코드 라인은 예외를 던집니다. –
나는 예외를 던졌습니다. 나는 'matchUri'의 결과와 함께'query()'메소드에서 switch-case를 가졌다; 디폴트 (URI 매치 실패)는'InvalidArgumentException'을 가로 챌 것이다. –