无法找到“ContentProvider”的提供商信息

时间:2011-09-18 17:23:19

标签: android android-contentprovider

我有一个我无法弄清楚的问题。我正在使用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" />

我已将提供程序添加到清单中,并从onCreate函数返回true。我在我的活动中使用CountryContentProvider.CONTENT_URI从我的提供商处获取内容,但我只是不断收到该错误消息。我删除并添加了三次代码(在日食融化的情况下)无济于事 我肯定错过了什么。有人能指出我正确的方向吗?

6 个答案:

答案 0 :(得分:49)

当我移动&lt; provider&gt;时,我能够重现您的问题超出&lt; application&gt; ...&lt; / application&gt;标签。 Eclipse没有说错误或警告。

幸运的是,Android Lint从ADT 20开始检测到此问题。

答案 1 :(得分:14)

只有在清单文件中的Authorities标记中指定完整路径后才能使用它(请参阅SDK中的SearchableDictionary示例代码)。

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

答案 2 :(得分:1)

在清单中的provider标记中将exported属性设置为true对我有用:

android:exported="true"

根据文档(http://developer.android.com/guide/topics/manifest/provider-element.html#exported),仅当提供者可用于其他应用程序时才需要导出。但这是唯一对我有用的解决方案。

答案 3 :(得分:0)

XML文件中的android:authorities =是您可能构建的合同类中的内容权限。将内容权限添加到方案中以制作基本内容URI。简单的英语,你用来使你的应用程序没有上限的反向域com.domain.sub.appName。

android:name是你的提供者命名的文件夹加类,不要忘记dot .folder.ProviderClassContentAuthorityIsIn。

希望这会有所帮助:)

答案 4 :(得分:-1)

你有一个大写字母,另一行是一个小写字母。

android:name =&#34; my.package.provider .- C -ountryContentProvider&#34; 机器人:当局=&#34; my.package.provider .- C -ountrycontentprovider&#34;

它无处不在。

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

答案 5 :(得分:-2)

在Android清单中注册您的提供商

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