1

cursor.getCount()で返される値が1つしかないことはわかっていますが、Androidカーソルが2回ループするという問題があります。

DBAdapter で以下を使用しています。

public Cursor getAllSubDetailsFromObsTable() {
Cursor c = mDb
        .rawQuery(
                "SELECT DISTINCT sub.sub_id, sub.complete, mobileobs.date, mobileobs.location, mobileobs.grid_ref, "
                        + "mobileobs.time, mobileobs.protocol_id, mobileobs.endtime FROM sub, mobileobs "
                        + "WHERE sub.sub_id = mobileobs.sub_id",
                null);
return c;
}

次に、これをワーカー クラス内で次のように呼び出します。

db.open();
Cursor c = db.getAllSubDetailsFromObsTable();
while (c.moveToNext()) {
        String sub_id = c.getString(0);
        //Rest of real code <snipped>
        myArrayList.add(sub_id);
}
c.close();
db.close();

しかし、myArrayList の内容を見ると、sub_id の同じ値が 2 つあります。c.moveToFirst() などをいじってみましたが、c.getCount() = 1 にもかかわらず、arrayList に 2 つの値が取得されます。

4

1 に答える 1

1

ついにこれを釘付けにしました。それはクラス変数とメソッド変数と関係がありました。onResume内でも呼び出されていたonCreate内のメソッドによって入力されていたクラス変数がありました。解決策は、変数をメソッドに移動することでした。愚かなバグ、修正が簡単、(私にとって)見つけるのが難しい。

于 2012-10-15T16:33:07.853 に答える