难以理解UriMatcher语法

时间:2016-12-01 06:40:48

标签: android uri android-contentprovider

我已经完成了很多关于这个主题的阅读,但我找不到任何关于这些符号*, #是什么意思/表示的内容。

如果它们被用作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 个答案:

答案 0 :(得分: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   part指向表中的单个行。