【问题标题】:Trouble understanding UriMatcher Syntax无法理解 UriMatcher 语法
【发布时间】:2016-12-01 06:40:48
【问题描述】:

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

如果它们被用作某些东西的占位符,例如 SqLite 的 ?,那么它们将替换什么?另外,如果您所做的只是匹配 Uri,那么使用这种神秘符号的目的是什么?

如果我想返回一个列表、对象或其他任何东西,我为什么不直接用可读的东西命名常量并给它一个任意值并从那里继续呢?

例如

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);

【问题讨论】:

    标签: android uri android-contentprovider


    【解决方案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 包含整个提供者的符号名称(其权限) 以及指向表或文件的名称(路径)。可选标识 part 指向表中的单个行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-23
      • 1970-01-01
      • 2021-10-14
      • 2017-11-23
      • 2019-02-11
      • 1970-01-01
      • 1970-01-01
      • 2010-10-14
      相关资源
      最近更新 更多