1. ホーム
  2. アンドロイド

[解決済み】Androidのカーソルを反復処理する最良の方法は何ですか?

2022-03-29 20:05:52

質問

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

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 メソッドがあります。きっともっとすっきりした方法があるのでしょう?

どのように解決するのか?

一番簡単な方法はこれです。

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()) {
        ...
    }
}