Cursor cursor = db.query(...);
if (cursor.moveToFirst()) {
do {
cursor.getString(...);
...
} while (cursor.moveToNext());
}
多分最初のカーソル位置がどこにあるか良く分からないとか、名前的にまあ First に移動してから Next に移動するのが正しいんだろう、という感覚で書いてると思うんですが、実際は Cursor.getPosition のドキュメントに次のような記載があります。
When the row set is first returned the cursor will be at positon -1, which is before the first row.
行セットが最初に返されたとき、カーソルの位置は -1, つまり最初の行の一つ前に設定されています。つまり、 Cursor インスタンスを受け取ってから最初の Cursor.moveToNext 呼び出しで先頭行を取り出せることはちゃんと仕様上保証されているので、次のように単純なループで書いて大丈夫です。
Cursor cursor = db.query(...);
while (cursor.moveToNext()) {
cursor.getString(...);
...
}
何となくコピペプログラミングで感染しまくってる感があったので、ただそれだけですがメモ。