Создание и использование ContentProvider для Android - PullRequest
3 голосов
/ 10 декабря 2010

Когда я вызываю Android ContentProvider, я получаю следующее исключение:

java.lang.RuntimeException: невозможно начать деятельность ComponentInfo {de.harm.android.couchone / de.harm.android.couchone.CouchContactClient}: java.lang.IllegalArgumentException: Неизвестный URL Содержание: //de.harm.android.couchone.provider/test2

Это проекты:

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

ContentProvider регистрируется с уникальным Uri. ContentResolver вызывает ContentProvider с этим Uri и передает дополнительные данные, такие как строка SQL-запроса и / или данные для сохранения.

В CouchOneProvider / AndroidManifest.xml у меня есть следующее:

<provider android:authorities="de.harm.android.couchone.provider"
   android:name=".Provider" />

Провайдер использует

static {
    uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
    uriMatcher.addURI(PROVIDER_NAME, DB_Name, URI_COLLECTION);
    uriMatcher.addURI(PROVIDER_NAME, DB_Name + "/#", URI_ENTITY);
}

и

public static boolean isCollectionUri(Uri uri) {
    return uriMatcher.match(uri) == URI_COLLECTION;
}

для обработки CONTENT_URI, используемого ContentResolver для вызова ContentProvider:

  • Мне не хватает разрешений в любом из AndroidManifest.xml?
  • Я неправильно определяю авторитет в AndroidManifest.xml? 1046 *
  • Является ли CONTENT_URI неправильным?

Обновление:

У меня есть дополнительная информация:

Logcat говорит:

Не удалось найти информацию о поставщике для de.harm.android.couchone.provider

Это должно быть отправной точкой. Но пока я не смог найти никакого решения.

Полное имя класса реализации ContentProvider:

de.harm.android.couchone.Provider

В AndroidManifext.xml именно это указывается как полномочие, за исключением имени, которое должно быть в нижнем регистре, но это должно быть хорошо.

Имя пакета определено ранее в xml-файле, поэтому «.Provider» тоже должен быть в порядке.

Как видно из исключения, клиент вызывает:

content://de.harm.android.couchone.provider/test2

Logcats ответ:

Не удалось найти информацию о поставщике для de.harm.android.couchone.provider

Я не вижу, чего не хватает, возможно, это проблема Eclipse или эмулятора?

Я устанавливаю провайдера как «запуск проекта как приложения Android».

Ответы [ 2 ]

3 голосов
/ 14 декабря 2010

Я решил эту проблему:

Оба проекта имели одинаковую структуру пакета. Я изменил de.harm.android.couchone на de.harm.android.couchone.provider и de.harm.android.couchone.client.

0 голосов
/ 28 мая 2012

Я думаю, что эта ссылка относится к теме вопроса. Как реализовать пользовательский контент-провайдер .

...