无法找到“ContentProvider”的提供商信息;
我有一个我无法弄清楚的问题。我正在使用 Eclipse 创建自己的 Content Provider,但不断收到以下错误:
[..] 错误/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
从我的提供商获取内容,但我只是不断收到该错误消息。我已经删除并添加了三次代码(以防 Eclipse 崩溃),但无济于事。
我一定是错过了什么。有人能指出我正确的方向吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
当我将 移动到时,我能够重现您的问题。在<应用程序>...之外标签。 Eclipse 没有说任何错误或警告之类的内容。
幸运的是,从 ADT 20 开始,Android Lint 就检测到了这个问题。
I was able to reproduce your problem when I moved <provider> out of the <application>...</application> tag. Eclipse didn't say anything like error or warning.
Fortunately this issue is detected by Android Lint starting from ADT 20.
仅在清单文件中的
Authorities
标记中指定完整路径后,它才对我起作用(请参阅 SDK 中的 SearchableDictionary 示例代码)。It worked for me only after specifying full path in
Authorities
tag in manifest file (see SearchableDictionary sample code in SDK).在具有 contentresolver 的 B 应用内,将其添加到 AndroidManifest.xml 中的 application-tag 外部
Inside your B-app which has the contentresolver, add this in the AndroidManifest.xml, outside application-tag
在清单中的提供程序标记中将导出属性设置为 true 对我有用:
根据文档(http://developer.android.com/guide/topics/manifest/provider-element.html#exported),仅当提供程序可用于其他应用程序时才需要导出。但这是唯一对我有用的解决方案。
Setting the exported attribute to true in the provider tag in the manifest worked for me :
According to the documentation(http://developer.android.com/guide/topics/manifest/provider-element.html#exported), export is required only if the provider is to be available for other applications. But this is the only solution that worked for me.
XML 文件中的 android:authorities= 是位于您可能构建的合约类中的内容权限。将内容权限添加到方案中以形成基本内容 URI。简单的英语,您用来使您的应用程序没有上限的反向域名 com.domain.sub.appName。
android:name 是您的提供程序命名的文件夹和类,不要忘记点 .folder.ProviderClassContentAuthorityIsIn。
希望这有帮助:)
The android:authorities= in the XML file is the content authority that is located in the contract class that you probably built. The content authority is added to the scheme to make the base content URI. Plain English, the reverse domain you used to make your app no caps here com.domain.sub.appName.
The android:name is the folder plus class your provider is named, do not forget the dot .folder.ProviderClassContentAuthorityIsIn.
Hope this helps :)
你有一个大写字母,另一行有一个小写字母。
android:name= "my.package.provider.-C-ountryContentProvider"
android:authorities="my.package.provider.-c-ountrycontentprovider"
它必须在任何地方都相同。
you have a capital letter and on the other line, one lowercase letter.
android:name= "my.package.provider.-C-ountryContentProvider"
android:authorities="my.package.provider.-c-ountrycontentprovider"
it must be the same everywhere.
在 Android 清单中注册您的提供商
Register your provider in the Android Manifest