UriMatcher là lớp tiện dụng khi bạn viết một trình ContentProvider hoặc một số lớp khác cần trả lời một số URI khác nhau. Trong ví dụ của bạn, người dùng có thể truy vấn cung cấp dịch vụ của bạn với các URI như:
myprovider://cte
hoặc
myprovider://cte/somestring
Khi bạn xây dựng một UriMatcher, bạn cần phải có mã số riêng cho từng URI (không chỉ là "uriCode "như trong ví dụ của bạn). Tôi thường làm ví dụ UriMatcher tôi tĩnh, và thêm các URI trong một constructor tĩnh:
private static final int CTE_ALL = 1;
private static final int CTE_FIND = 2;
private static final UriMatcher uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
static {
uriMatcher.addURI(PROVIDER_NAME, "cte", CTE_ALL);
uriMatcher.addURI(PROVIDER_NAME, "cte/*", CTE_FIND);
}
Sau đó, trong ContentProvider của bạn, bạn sẽ làm điều gì đó như thế này trong phương pháp truy vấn của bạn:
Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
int res = uriMatcher.match(uri);
switch (res) {
case CTE_ALL:
//TODO create a results Cursor with all the CTE results
break;
case CTE_FIND:
//TODO create a results Cursor with the single CTE requested
break;
}
return results;
}
"Tôi thường làm cho trường hợp UriMatcher tĩnh" tại sao? –
@ MarianPaździoch staitc chặn được gọi khi lớp học được mã hóa trước khi tạo đối tượng bất kỳ. Điều này làm cho trình phù hợp uri sẵn sàng hoạt động khi đang tải lớp .. – W00di