内容提供者和sqlite数据库,uri语法

时间:2011-08-19 13:56:19

标签: android uri android-contentprovider authority

我几天来尝试通过内容提供商访问数据库失败了。

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

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

有人可以解释一下我的案例中Uri的正确格式是什么吗?提供者的权限部分的语法是什么?一个权限可以命名为例如com.test.foo,它应该仍然有用,或者点后面的最后一部分应该是类名还是类似的?

我还为AndroidManifest.xml文件制作了必要的提供者代码。

2 个答案:

答案 0 :(得分:3)

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

我猜你在内容提供商中很少误解uri。通常,您不会在uri中使用甚至公开数据库名称(尽管您可以选择)。 uri应该是数据库中记录的路径。在您的示例中,您可以使用content://com.text.dbprovider/table1之类的内容。权限应该是内容提供者的完全限定类名。有关内容提供商'uris here的更多信息。

我建议你查看样本中的NotePad content provider implementation

答案 1 :(得分:0)

使用权限引用数据库。所以com.test.dbprovider.testdatabase。不要把#34; .db" 还要确保您的权限与包装一致。因此,如果您打包com.test.contentprovider,请不要添加" dbprovider"随机。

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

摘要content://com.text.dbprovider.testdatabase/table1