我有一个我无法弄清楚的问题。我正在使用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
从我的提供商处获取内容,但我只是不断收到该错误消息。我删除并添加了三次代码(在日食融化的情况下)无济于事
我肯定错过了什么。有人能指出我正确的方向吗?
答案 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"/>