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

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

[..] Ошибка / ActivityThread (1051): не удалось найти информацию о поставщике для мой.пакет.поставщик.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 из the

6 ответов


Я смог воспроизвести вашу проблему, когда я переместил из ...тегом . Eclipse не сказал ничего вроде ошибки или предупреждения.

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


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

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

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

android:exported="true"

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


android: authorities= в XML-файле находится content authority, который находится в классе контракта, который вы, вероятно, создали. Для создания URI базового содержимого в схему добавляется центр управления содержимым. Простой английский, обратный домен, который вы использовали, чтобы сделать ваше приложение no caps here com.домен.подводная лодка.appName.

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

надеюсь, это поможет :)


у вас есть заглавная буква, А на другой строке одна строчная буква.

android: name= " my.пакет.поставщик.-C-ountryContentProvider" android: authorities= " my.пакет.поставщик.-c-ountrycontentprovider"

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

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

зарегистрируйте поставщика в Манифесте Android

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