2016-12-01 88 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 部分指向表中的单个行。