2014-03-24 39 views
5

下一個代碼是否按預期工作?Cursor.moveToNext without moveToFirst

Cursor c = db.query(tableName, requestedColumns, condition, 
     conditionParams, null, null, sortOrder); 
while(c.moveToNext()) { 
    //do stuff with rows 
} 

的例子,我發現迄今建議呼籲c.moveToFirst()之前的循環,但是否真的有必要嗎?

+1

還要確保關閉遊標,當你用它做,while循環之後。 GL – DejanRistic

+0

@DejanRistic謝謝您指出。 – alandarev

回答

9

是的,它會工作,moveToNext實際調用moveToFirst

+0

moveToNext移動到下一個,但是如果起始位置爲-1,則首先調用moveToNext作爲moveToFirst。 – pskink

+3

是moveToNext調用moveToPosition(mPos + 1),moveToFirst調用moveToPosition(0)。所以如果你是第一個開始,那麼他們的行爲是一樣的。 – DejanRistic

+0

如果遊標中沒有任何記錄或行,該怎麼辦?不會給出任何錯誤? – Sudhir

3

是的,它會工作,第一個使用MoveToNext()將光標指向結果集的第一項,(如果結果集有值)

0

一個較遲的答案,但也許對其他人找到此頁有用。我一直在使用:「if()do {} while();」循環。如果遊標中沒有返回行,則「moveToFirst()」函數返回false。該「使用MoveToNext()」函數返回false過去時光標結束:

Cursor c = db.query(......); 

if (c.moveToFirst()) do { 
    data = c.getString(0) // eg. get value from first column in cursor 
    // do something more 
} while (c.moveToNext()); 

c.close();