Контент-провайдер и база данных sqlite, синтаксис URI - PullRequest
2 голосов
/ 19 августа 2011

Я безуспешно пытаюсь получить доступ к базе данных через провайдера контента уже пару дней.

Я думаю, что я не понимаю синтаксис Uri, который используется для указания на базу данных. Возможно, я не правильно понимаю документацию разработчика Android о формате Uri.

У меня есть база данных с именем «testdatabase.db», таблица с именем «table1» и класс с именем DbProvider, который подклассов ContentProvider. База данных создана успешно, и я могу делать запросы к ней, используя оболочку adb, но когда я пытаюсь сделать запросы от клиента, я получаю IllegalArgumentException Unknown uri: content://com.test.dbprovider/testdatabase.db

Может кто-нибудь объяснить, какой правильный формат Ури в моем случае? А каков синтаксис авторитетной части провайдера? Можно ли назвать орган, например, com.test.foo, и он все еще должен работать, или последняя часть после точки должна быть именем класса или чем-то подобным?

Я также сделал необходимые теги провайдера для файла AndroidManifest.xml.

Ответы [ 2 ]

3 голосов
/ 04 сентября 2011

Вы получаете исключение, потому что ваш контент-провайдер не знает указанный вами uri.Поскольку вы не показали свой код, я не могу сказать, что именно не так.Проверьте экземпляр UriMatcher в вашем поставщике контента (Вы используете UriMatcher, верно? Если нет, проверьте документы .)

Я полагаю, вы немного неправильно поняли URI в поставщике контента.Обычно вы не используете или даже не выставляете имя базы данных в URI (хотя можете, если хотите).Предполагается, что URI - это путь к записям в вашей базе данных.В вашем примере вы можете использовать что-то вроде content://com.text.dbprovider/table1.Полномочием должно быть полное имя класса поставщика контента.Подробнее о Uris контент-провайдеров здесь .

Я предлагаю вам проверить реализацию поставщика контента NotePad в примерах.

0 голосов
/ 11 сентября 2014

БД упоминается с использованием полномочий.так что com.test.dbprovider.testdatabase.не ставьте «.db» и убедитесь, что ваши права доступа точно такие же, как указано в вашем пакете.поэтому, если ваш пакет com.test.contentprovider, не добавляйте "dbprovider" случайно.

убедитесь, что полномочия идентичны в манифесте Android.

сводка content://com.text.dbprovider.testdatabase/table1

...