2014-11-13 72 views
11

Uri Matcher là gì trong android.content.UriMatcherÝ nghĩa của android.content.UriMatcher

Cách sử dụng? Ai đó có thể giải thích ý nghĩa của ba dòng mã sau đây không?

uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); 
    uriMatcher.addURI(PROVIDER_NAME, "cte", uriCode); 
    uriMatcher.addURI(PROVIDER_NAME, "cte/*", uriCode); 
    int res = uriMatcher.match(uri); 

Trả lời

31

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; 
} 
+1

"Tôi thường làm cho trường hợp UriMatcher tĩnh" tại sao? –

+1

@ 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

5

tôi thấy như sau video có ích:

URI Basics

URI Matcher

Về bản chất, những gì bạn đang cố gắng làm là, có một ID hoặc một số liên quan đến các URI khác nhau. Khi bạn sử dụng addUri, một mã/số/ID được tạo ra với URI. Khi bạn yêu cầu một kết quả phù hợp(), mã tương ứng được trả về.