2011-08-19 43 views
2

我幾天來一直試圖訪問數據庫低谷內容提供程序失敗。內容提供者和sqlite數據庫,uri語法

我認爲我不明白用來指向數據庫的Uri語法。也許我不明白Android開發者關於Uri格式的文檔。

我有一個名爲「testdatabase.db」的數據庫,其名稱爲「table1」的表和名爲DbProvider的類表示子類ContentProvider。數據庫創建成功,我可以使用adb外殼查詢它,但是當我嘗試從客戶端進行查詢時,我得到了IllegalArgumentException Unknown uri: content://com.test.dbprovider/testdatabase.db

有人請解釋我的情況下Uri的正確格式是什麼?提供者的權威部分的語法是什麼?權限的名稱可以是com.test.foo,它應該仍然可以工作,或者應該在點之後的最後一部分是類名或類似名稱?

我也做了必要的提供商標籤到AndroidManifest.xml文件。

回答

3

由於您的內容提供者不知道您指定的URI,您將得到例外。既然你沒有顯示你的代碼,我不能說什麼是錯的。檢查你的內容提供商的UriMatcher的實例(你正在使用UriMatcher,對嗎?如果沒有檢查docs。)

我想你在內容提供商中誤解了uri。通常情況下,你不使用甚至暴露uri中的數據庫名稱(雖然你可以如果你喜歡)。 uri應該是數據庫中記錄的路徑。在你的例子中,你可以使用類似content://com.text.dbprovider/table1的東西。該權限應該是內容提供者的完全合格的類名稱。更多關於內容提供商的uris here

我建議你檢查樣本中的NotePad content provider implementation

0

使用權限引用數據庫。所以com.test.dbprovider.testdatabase。不要把「.db」 也確保你的權限和你的包一樣。所以如果你的包是com.test.contentprovider不要隨意添加「dbprovider」。

確保Android清單中的權限相同。

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