0

我目前正在開發一個應用程序,該應用程序使用數據庫/ ContentProvider提供從網絡中拉出並定期存儲在數據庫中的某些位置數據。奇數光標行爲

我已驗證數據庫是在應用程序中正確創建的,並且通過將應用程序本地數據庫的副本導出到SD卡以在SQL瀏覽器中查看來填充數據表 - 所以數據不是在場並不是問題。

奇怪的行爲可能會更好過了幾個我的調試過程中的截屏的可視化:

所以,最初的時候我做了我的疑問,我所有的Cursor對象是爲行數返回-1,甚至儘管我驗證了SELECT * FROM TABLE_NAME語句應該返回值,因爲從設備中取出的數據庫包含行數據。下面就來看看在調試器步:

enter image description here

注意,當光標開始返回,mCount顯示爲-1。

出於好奇,我添加了cursor.moveToFirst();打電話,而這裏的從步驟後的屏幕截圖:

enter image description here

注意,光標計數改變從-1到3,其對應於正確的行數(因爲應用程序只佔3個大洲大氣壓)。不幸的是,這個應該是不必要的添加行仍然不能解決我的問題,因爲CursorAdapter.bindView()和CursorAdapter.newView()仍然無法使用生成的遊標進行調用。

我很困惑什麼可能導致此問題,以及如何解決它?如果任何人都可以提供有關問題的信息,請告訴我。此外,如果需要額外的代碼,比如SQL創建語句等,讓我知道 - 但是,正如我已經提到的那樣,數據庫創建正常,並且在Android應用程序之外的導出數據庫副本上執行的查詢工作得很好...

最後一件事,該應用程序是爲API等級14+構建的。

回答

0

如果您有一個正在從數據庫中讀取的SQL查詢,您將希望延遲讀取該數據,直到您確定要使用它。

因此,當您撥打rawQuery時,您會收到對Cursor對象的引用。但沒有任何東西可讀。這是moveToFirst所做的。這是第一件事告訴遊標,你是認真的運行這個SQL查詢,並且你想要一個結果。

但是,由於您使用的是rawQuery,因此在嘗試使用moveToFirst獲取結果之前,沒有任何內容傳遞到數據庫。

希望這回答你的問題。

+0

啊,我之前沒有意識到那種行爲。謝謝。我仍然遇到CursorAdapter.bindView()和CursorAdapter.newView()沒有被調用的問題......但我想這可能是一個單獨的問題。 – Submersed