我几天来尝试通过内容提供商访问数据库失败了。
我认为我不理解用于指向数据库的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
文件制作了必要的提供者代码。
答案 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