Я создаю контент-провайдер для приложения Android, но у меня проблема с правильной совпадением uri с использованием UriMatacher.UriMatcher не соответствует шаблону
Например, я добавляю в Ури, чтобы соответствовать (пропущено по ссылке)
sURIMatcher.addURI("content://com.example", "people", PEOPLE);
sURIMatcher.addURI("content://com.example", "people/#", PEOPLE_ID);
sURIMatcher.addURI("content://com.example", "people/#/phones", PEOPLE_PHONES);
А затем пытаются получить доступ к contacts/people/1/phones
. Успешный матч заканчивается PEOPLE_ID
вместо PEOPLE_PHONES
.
Запрос первоначально генерируется данным кодом.
Uri uri = Uri.parse("content://com.example/people/#/phones");
ContentUris.appendId(uri.buildUpon(), 1).build();
С некоторыми заявлениями лесозаготовительных придачу, я вижу, что следующее:
Ури передается query дает следующее:
content://com.example/people/1#/phones
но uri.getPath()
дает это:
/people/1
Третья часть пути uri четко отбрасывается, что объясняет почему они совпадают с неправильным ури.
Пример с сайта разработчика Android, похоже, указывает на то, что с этим не должно быть никаких проблем. Я неправильно создаю uri? Это просто ошибка? Является ли это предполагаемой функциональностью (и, следовательно, пример от разработчиков Android является плохим)?
Вы пытались обменять порядок «людей/#/телефонов» и «люди /» # в sURIMatcher.addURI() вызывает? – sandrstar
Я попытался сменить порядок, это не повлияло. Я также попытался полностью удалить все, кроме 'people/#/phones'. В этом случае он просто не прошел мой случай по умолчанию. – CoatedMoose