Не удалось найти информацию о провайдере для ContentProvider.

У меня проблема, которую я просто не могу понять. Я использую Eclipse для создания своего собственного Content Provider, но продолжаю получать следующую ошибку:

[..] ERROR / ActivityThread (1051): Не удалось найти информацию о провайдере для my.package.provider.countrycontentprovider

Код найден здесь: http://codepad.org/Rx00HjHd

Основные части:

public class CountryContentProvider extends ContentProvider { public static final String PROVIDER = "my.package.provider.countrycontentprovider"; public static final Uri CONTENT_URI = Uri.parse("content://" + PROVIDER + "/country"); // ... @Override public boolean onCreate() { return true; } // ... } // from my activity ContentResolver resolver = getContentResolver(); Cursor c = resolver.query(CountryContentProvider.CONTENT_URI, null, null, null, null); // AndroidManifest.xml <provider android:name="my.package.provider.CountryContentProvider" android:authorities="my.package.provider.countrycontentprovider" /> 

Я добавил провайдера в манифест и вернул true из функции onCreate . Я использую CountryContentProvider.CONTENT_URI в своей деятельности, чтобы получить контент у моего провайдера, но я просто продолжаю получать это сообщение об ошибке. Я удалил и добавил код три раза (в случае затмения), безрезультатно.
Мне что-то не хватает. Может ли кто-нибудь указать мне в правильном направлении?

Solutions Collecting From Web of "Не удалось найти информацию о провайдере для ContentProvider."

Я смог воспроизвести вашу проблему, когда я переместил <provider> из тега <application> … </ application>. Eclipse не сказал ничего подобного ошибке или предупреждению.

К счастью, эта проблема обнаруживается Android Lint, начиная с ADT 20.

Он работал для меня только после указания полного пути в теге Authorities в файле манифеста (см. Пример кода SearchableDictionary в SDK).

 <provider android:name=".DictionaryProvider" android:authorities="com.example.android.searchabledict.DictionaryProvider"> 

Установка экспортированного атрибута в true в теге провайдера в манифесте работала для меня:

 android:exported="true" 

Согласно документации ( http://developer.android.com/guide/topics/manifest/provider-element.html#exported ), экспорт требуется только в том случае, если поставщик должен быть доступен для других приложений. Но это единственное решение, которое сработало для меня.

Андроид: authority = в файле XML – это контент, который находится в классе контракта, который вы, вероятно, создали. Владелец контента добавляется в схему для создания базового URI контента. Обычный английский, обратный домен, который вы использовали для создания своего приложения, не содержит здесь com.domain.sub.appName.

Андроид: имя – это папка плюс класс, на который указан ваш провайдер, не забудьте точку .folder.ProviderClassContentAuthorityIsIn.

Надеюсь это поможет 🙂

У вас есть прописная буква, а на другой строке – одна строчная буква.

Android: name = "my.package.provider.- C -ountryContentProvider" android: authority = "my.package.provider.- c -ountrycontentprovider"

Она должна быть одинаковой везде.

 public static final String PROVIDER = "my.package.provider.countrycontentprovider"; 

Зарегистрируйте своего провайдера в манифесте Android

 <provider android:authorities="your_content_authority" android:name="yourProviderClass"/>