18
創建一個標準的SQLite光標後,我迭代通使用的條目:sqlite的:看起來像使用MoveToNext作品,未經moveToFirst需要
while (cursor.moveToNext()) {
}
所有行正確處理。 我讀過的所有文檔都指出,您需要發出moveToFirst()
以確保 您指向光標集的第一個條目。
這是否正常工作,即使它不應該, 和另一個版本可能沒有相同的處理?
創建一個標準的SQLite光標後,我迭代通使用的條目:sqlite的:看起來像使用MoveToNext作品,未經moveToFirst需要
while (cursor.moveToNext()) {
}
所有行正確處理。 我讀過的所有文檔都指出,您需要發出moveToFirst()
以確保 您指向光標集的第一個條目。
這是否正常工作,即使它不應該, 和另一個版本可能沒有相同的處理?
不,這是正常工作。 Cursor
s從行索引-1開始(在第一行之前)。如果Cursor
引用多行,則使用while
循環遍歷它們是您首選的方法。它會調用moveToNext()
,它將您移至索引0(第一行),然後從那裏開始。
如果您的Cursor
只引用一行,您可以在讀取數據之前調用moveToFirst()
以確保您處於有效索引。當第一次創建Cursor
並且位於索引-1時,moveToFirst()
和moveToNext()
都具有相同的效果。
謝謝!這解釋了爲什麼它始終如一地工作。奇怪的是,我沒有看到任何示例指出這是一種可以通過遊標進行迭代的方式。 – charlest
+1,非常棒的分析。這也是[記錄在這裏](http://developer.android.com/reference/android/database/Cursor.html#getPosition())。 「 – orip
」將您移動到索引0(第一行)「 正確地,它從索引-1移動到索引1,跳過0。 – vitalii