2016-12-01 90 views
0

我已經做了很多的閱讀關於這個問題,但我不能找到什麼這些符號,*, #,都意味着是/代表什麼。無法理解UriMatcher語法

如果他們作爲內容的佔位符,如SQLite的的?,那麼它們是什麼取代?另外,如果你所做的只是與Uri相匹配,那麼這個神祕符號的目的是什麼?

如果我想返回一個列表,對象或其他任何東西,我爲什麼不只是名稱的常量的東西可讀,並給它一個任意值,並從那裏呢?

E.g.

sURIMatcher.addURI("contacts", "people", PEOPLE); 
sURIMatcher.addURI("contacts", "people/#", PEOPLE_ID); 
sURIMatcher.addURI("contacts", "people/#/phones", PEOPLE_PHONES); 

sURIMatcher.addURI("contacts", "people", PEOPLE); 
sURIMatcher.addURI("contacts", "people_id", PEOPLE_ID); 
sURIMatcher.addURI("contacts", "people_phones", PEOPLE_PHONES); 

回答

1

我用這個例如要刪除我的數據庫中具有特定ID的條目。

Uri deleteUri = Uri.parse(NoteProvider.CONTENT_URI + "/" + id); 
context.getContentResolver().delete(deleteUri, null, null); 

// URI Matcher 
sURIMatcher.addURI(AUTHORITY, NOTE_BASE_PATH + "/#", NOTE_WITH_ID); 

// delete 
String id = uri.getLastPathSegment(); 
rowsDeleted = db.delete(NoteEntry.TABLE_NAME, NoteEntry._ID + "=" + id, null); 
  • *:匹配任意長度的任何有效字符的字符串。
  • #:匹配任意長度的數字字符的字符串。

URI表示通向資源的路徑,這是您通過ContentProvider訪問的路徑。所以我認爲URI最適合這種情況。

一種內容URI是一個URI,在一個提供商識別數據。內容 的URI包括整個供應商的符號名(其權威) 並指向一個表或文件(路徑)的名稱。可選ID 部分指向表中的單個行。