2016-12-01 6 views
0

Я проделал много чтения по этому вопросу, но я не могу найти ничего, что означают эти символы *, #.Устранение неполадок Синтаксис UriMatcher

Если они используются как заполнитель для чего-то, например, SqLite ?, то что они заменяют? Кроме того, если все, что вы делаете, соответствует Uri's, то зачем нужна эта загадочная нотация?

Если бы я хотел вернуть список, объект или что-то еще, почему бы мне просто не назвать константу чем-нибудь читаемым и дать ему произвольное значение и продолжить оттуда?

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

Я использую это, например, чтобы удалить запись моей базы данных с определенным идентификатором.

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 часть указывает на отдельную строку в таблице.