Подтвердить что ты не робот

Не удалось найти информацию о провайдере для 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 в своей деятельности, чтобы получить контент от моего провайдера, но я просто продолжаю получать это сообщение об ошибке. Я удалил и добавил код три раза (в случае таяния затмения) безрезультатно.
Я должен что-то упустить. Может ли кто-нибудь указать мне в правильном направлении?

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

Ответ 3

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

android:exported="true"

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

Ответ 4

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

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

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

Ответ 5

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

android: name= "my.package.provider.-C-ountryContentProvider" Android: власти = "my.package.provider.-с-ountrycontentprovider"

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

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

Ответ 6

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

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