2

几天来,我一直未能成功尝试通过内容提供者访问数据库。

我认为我不理解用于指向数据库的 Uri 的语法。也许我没有正确理解 Android 开发人员关于 Uri 格式的文档。

我有一个名为“testdatabase.db”的数据库,一个名为“table1”的表和一个名为DbProvidersubclasses的类ContentProvider。数据库已成功创建,我可以使用 adb shell 对其进行查询,但是当我尝试从客户端进行查询时,我得到了IllegalArgumentException Unknown uri: content://com.test.dbprovider/testdatabase.db

有人可以解释一下我的 Uri 的正确格式是什么吗?提供者的权限部分的语法是什么?例如,可以命名一个权限com.test.foo并且它应该仍然可以工作,或者点之后的最后一部分应该是一个类名或类似的东西吗?

我还制作了必要的提供者标签来AndroidManifest.xml归档。

4

2 回答 2

3

您收到异常是因为您的内容提供商不知道您指定的 uri。由于您没有显示您的代码,我不能说到底是什么错误。检查您的内容提供商中的 UriMatcher 实例(您正在使用 UriMatcher,对吗?如果没有检查文档。)

我猜你对内容提供者中的 uri 有一点误解。通常,您不会在 uri 中使用甚至公开数据库名称(尽管如果您愿意,也可以这样做)。uri 应该是数据库中记录的路径。在您的示例中,您可以使用类似content://com.text.dbprovider/table1. 权限应该是内容提供者的全限定类名。更多关于内容提供者的 uris在这里

我建议您检查示例中的记事本内容提供程序实现

于 2011-09-04T00:27:16.743 回答
0

使用权限引用 DB。所以com.test.dbprovider.testdatabase。不要放“.db”,还要确保您的权限与您的包完全一样。所以如果你的包是com.test.contentprovider不要随机添加“dbprovider”。

确保 android 清单中的权限相同。

概括content://com.text.dbprovider.testdatabase/table1

于 2014-09-10T22:31:31.883 回答