Android カーソルを反復処理する最良の方法は何ですか? 質問する

Android カーソルを反復処理する最良の方法は何ですか? 質問する

データベースクエリの結果を反復処理し、各行で何かを実行してから次の行に移動するコードをよく見かけます。典型的な例は次のとおりです。

Cursor cursor = db.rawQuery(...);
cursor.moveToFirst();
while (cursor.isAfterLast() == false) 
{
    ...
    cursor.moveToNext();
}
Cursor cursor = db.rawQuery(...);
for (boolean hasItem = cursor.moveToFirst(); 
     hasItem; 
     hasItem = cursor.moveToNext()) {
    ...
}
Cursor cursor = db.rawQuery(...);
if (cursor.moveToFirst()) {
    do {
        ...                 
    } while (cursor.moveToNext());
}

これらはすべて、メソッドを複数回呼び出しており、私には非常に冗長に思えますCursor。もっとすっきりした方法があるはずですよね?

ベストアンサー1

最も簡単な方法は次のとおりです。

while (cursor.moveToNext()) {
    ...
}

カーソルは最初の結果行の前で開始されるため、最初の反復では、最初の結果が存在する場合はその行に移動します。カーソルが空の場合、または最後の行がすでに処理されている場合は、ループは正常に終了します。

もちろん、できれば句内での使用が終わったら、カーソルを閉じることを忘れないでくださいfinally

Cursor cursor = db.rawQuery(...);
try {
    while (cursor.moveToNext()) {
        ...
    }
} finally {
    cursor.close();
}

API 19 以上をターゲットとする場合は、try-with-resources を使用できます。

try (Cursor cursor = db.rawQuery(...)) {
    while (cursor.moveToNext()) {
        ...
    }
}

おすすめ記事