无法找到"ContentProvider"的提供商信息

Def*_*ult 30 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" />
Run Code Online (Sandbox Code Playgroud)

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

Dar*_*leg 49

当我将<provider>移出<application> ... </ application>标记时,我能够重现您的问题.Eclipse没有说错误或警告.

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

  • 所以我的意思是`<provider>`标签应放在`<application>`标签内. (3认同)
  • 另外,请注意不要像我在开始时那样将它放在<activity>标记内. (2认同)

and*_*ude 15

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

<provider android:name=".DictionaryProvider"
       android:authorities="com.example.android.searchabledict.DictionaryProvider">
Run Code Online (Sandbox Code Playgroud)