[英]What causes Android's ContentResolver.query() to return null?
由於我今天收到的用於我的應用程序的用戶崩潰報告,我只是偶然發現了同樣的問題。 如果Android文檔不清楚它有助於查看源代碼。 這是我發現ContentResolver.query()
返回null
的原因:
無法獲取內容提供商。 這可能是由於指定的Uri
存在問題,或者因為它根本不存在於系統上。 如果Uri是問題,原因是:protocol不是content://
或者Uri沒有權限字符串部分(Uri.getAuthority()== null)。
獲取的提供程序的查詢方法本身返回null
。
可以獲取內容提供程序,但在查詢期間拋出了RemoteException 。
特別是因為(2.)因為沒有定義規則,所以可能導致null
的原因幾乎是任意的。 但通常情況下,如果SQLite是ContentProvider
的后端,您可以期望至少有一些空的Cursor對象而不是null
。
Android系統ContentProvider
在返回任何內容之前會做一些檢查。 如果輸入不符合預期,則返回null
的可能性很小。 但說實話,以前從未發生過這件事。 在查詢參數問題的情況下,我通常會收到IllegalArgumentException
。 也許一些ContentProvider實現在空結果集的情況下返回null
。
無論哪種方式。 似乎有必要始終檢查null 。 特別是原因數字(3.)可能會在任何Android設備上發生。
如果uri方案的格式不是content://
或者方案本身的contentProvider
不存在,則ContentResolver.query
返回null。
在以下情況下,ContentResolver.query()將返回null:
如果您嘗試傳遞數據庫中不存在的列名(一個非常常見的情況是開發人員使用常量作為列名,因為它們看起來類似於列)。
它可能為null,因為您的URI參數無效。
可能還有其他情況會返回null。 但是,以上兩種情況是開發人員拔毛的常見原因:)
我有同樣的問題。 我的錯誤是不關閉提供者的Cursor,以便稍后的查詢調用導致null。
如果您忘記在清單中聲明提供程序,則查詢可能會返回null。
如果沒有結果,則返回null。 我的意思是說如果給定的數據庫查詢沒有結果(甚至不是單行數據),則query()返回null。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.