【发布时间】:2010-12-10 00:57:04
【问题描述】:
当我调用 Android ContentProvider 时,出现以下异常:
java.lang.RuntimeException: 无法 开始活动 组件信息{de.harm.android.couchone/de.harm.android.couchone.CouchContactClient}: java.lang.IllegalArgumentException: 未知网址 内容://de.harm.android.couchone.provider/test2
这些是项目:
- https://github.com/der-harm/CouchOneProvider
- .../CouchOneContacts
Android 使用所谓的ContentResolver 与ContentProvider 通信,后者又处理持久性功能——访问数据库。
ContentProvider 使用唯一的 Uri 注册自己。 ContentResolver 使用此 Uri 调用 ContentProvider 并传递其他数据,例如 SQL 查询字符串和/或要保存的数据。
在CouchOneProvider/AndroidManifest.xml我有以下内容:
<provider android:authorities="de.harm.android.couchone.provider"
android:name=".Provider" />
提供者使用
static {
uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
uriMatcher.addURI(PROVIDER_NAME, DB_Name, URI_COLLECTION);
uriMatcher.addURI(PROVIDER_NAME, DB_Name + "/#", URI_ENTITY);
}
和
public static boolean isCollectionUri(Uri uri) {
return uriMatcher.match(uri) == URI_COLLECTION;
}
处理ContentResolver使用的CONTENT_URI调用ContentProvider:
- 我是否缺少
AndroidManifest.xml中的任何一个权限? - 我在
AndroidManifest.xml中定义的权限是否错误? -
CONTENT_URI错了吗?
更新:
我有更多信息:
Logcat 说:
未能找到提供者信息 de.harm.android.couchone.provider
这应该是起点。但到目前为止我找不到任何解决方案。
ContentProvider 实现的完全限定类名是:
de.harm.android.couchone.Provider
在AndroidManifext.xml 中,这被指定为权限,除了名称是小写的,但这应该没问题。
包名是之前在xml文件中定义的,所以“.Provider”也应该没问题。
从异常中可以看出,客户端调用:
content://de.harm.android.couchone.provider/test2
Logcats 的答案是:
未能找到 de.harm.android.couchone.provider 的提供者信息
我看不出缺少什么,可能是 Eclipse 或模拟器问题?
我将提供程序安装为“将项目作为 Android 应用程序运行”。
【问题讨论】:
标签: android couchdb android-contentprovider android-contentresolver couchone