2011-08-21 23 views
18

を必要とせずにmoveToNextが動作するように見える、私が使用してエントリを通して反復処理しています:sqliteのは:moveToFirstは標準SQLiteのカーソルを作成した後

while (cursor.moveToNext()) { 
} 

すべての行が正しく処理されています。 がカーソルセットの最初のエントリを指していることを確認するために、私が読んだすべてのドキュメントでmoveToFirst()を発行する必要があると述べています。

と同じ処理がない可能性がありますが、これは動作しますか。

答えて

42

いいえ、これは正しく機能しています。 Cursorは、行インデックス-1(最初の行の前)で始まります。 Cursorが複数の行を参照する場合は、提案したようにwhileループを使用してループします。 moveToNext()が呼び出され、インデックス0(最初の行)に移動し、そこから移動します。

Cursorが1つの行のみを参照する場合は、データを読み取る前にmoveToFirst()に電話して、有効なインデックスに登録されていることを確認してください。 moveToFirst()moveToNext()は、Cursorが最初に作成され、インデックス-1にあるときと同じ効果を持ちます。

+0

ありがとうございました!それはなぜそれが一貫して働いているのかを説明します。奇妙なことに、私が見た例のどれも、これはカーソルを使って反復できる方法ではないことを示しています。 – charlest

+4

+1、非常に素晴らしい分析。これも[ここに記載されています](http://developer.android.com/reference/android/database/Cursor.html#getPosition())です。 – orip

+0

"インデックス0(最初の行)に移動します。" インデックス-1からインデックス1に移動しますが、0をスキップします。 – vitalii

関連する問題