2011-03-18 55 views
3

所以,我有一個查詢返回一個Cursor與所有值(我確認這與cursor.getCount()返回的int等於數據庫中的記錄數),但對於某些原因,無論我寫什麼迭代循環,我都永遠無法檢索列表的第一個值。光標循環迭代不顯示第一個值

private void addAllUnsentCrapportsToList() { 
    mDbAdapter.open(); 
    Cursor cursor = mDbAdapter.getAllCrapports(); 
    cursor.moveToFirst(); 
    String text = ""; 
    while(cursor.isAfterLast() == false){ 
     text = text 
       + "typ: " + cursor.getString(cursor.getColumnIndex(DbAdapter.CRAPPORT_KEY_GARBAGETYPE)) 
       + " kommentar: " + cursor.getString(cursor.getColumnIndex(DbAdapter.CRAPPORT_KEY_COMMENT)) 
       + "\n"; 
     cursor.moveToNext(); 
    } 

    unsentCrapportList.setText(text); 
} 

該位代碼顯示除第一個以外的所有值。我究竟做錯了什麼?我已經嘗試了很多方法,包括做,而等,但總是以同樣的錯誤結束。

我錯過了什麼?

回答

1

原來代碼沒有錯。我不得不在Eclipse中進行「項目清理」,然後重新啓動模擬器。無論如何感謝所有的答案。

0
cursor.moveToFirst(); 
while (cursor.moveToNext()) { 
    // Your code 
} 

這從來沒有讓我失望。試試看看它是怎麼回事?

做一些記錄與日誌,看看你做了什麼,並檢查了數據庫的外觀與 http://sourceforge.net/projects/sqlitebrowser/

編輯:順便說一下,什麼特別的原因,你不使用startManagingCursor(cursor);?可能不會導致錯誤,只是想知道,因爲它似乎很方便。

1

它可能是更好的使用

if (cursor.moveToFirst()) { 
    while (cursor.moveToNext()) { 
     // Your code 
    } 
} 
1

我沒有看到任何你的代碼錯誤。所以,也許你沒有得到db的第一個價值?您是否嘗試過在cursor.moveToFirst();之後打印數據以查看哪個是第一個元素?