Не удалось найти информацию о поставщике для ContentProvider. - PullRequest
30 голосов
/ 18 сентября 2011

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

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

Ответы [ 6 ]

49 голосов
/ 18 сентября 2011

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

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

14 голосов
/ 07 декабря 2012

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

<provider android:name=".DictionaryProvider"
       android:authorities="com.example.android.searchabledict.DictionaryProvider">
1 голос
/ 01 июня 2014

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

android:exported="true"

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

0 голосов
/ 22 января 2017

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

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

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

0 голосов
/ 22 сентября 2016

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

<provider
    android:authorities="your_content_authority"
    android:name="yourProviderClass"/>
0 голосов
/ 18 августа 2014

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

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

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

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