Android光标不超过1条记录

Android cursor no step more than 1 record

我的查询return198个寄存器,但是游标只读了一个寄存器。 为什么?

cursormCount属性显示198.

此代码:

    public ArrayList<EnderecoOficina> retornarListaEnderecoOficina(String sCampo,
                                                               String sWhere) {
    ArrayList<EnderecoOficina> lista = new ArrayList<EnderecoOficina>();
    String query = String.format("SELECT %s FROM %s WHERE %s",
            sCampo,
            MyDBConstants.TABLE_OFICINAS,
            sWhere);

    SQLiteDatabase db = dbHandler.getReadableDatabase();
    Cursor cursor = db.rawQuery(query, null);

    int i = 0;
    if (cursor != null && cursor.moveToFirst()){
        EnderecoOficina item = new EnderecoOficina(i++,
                cursor.getString(0),
                cursor.getString(1),
                cursor.getString(2));
        lista.add(item);
    } while (cursor.moveToNext());

    cursor.close();
    db.close();

    return  lista;
}

image link(我的观点不允许在此处附上图片)。

我认为您混淆了 while 语法。

while (cursor.moveToNext());

将循环不做任何事情,直到 Cursor 为空。我想你想要 do/while 正如 CommonsWare answer.

所解释的那样

在我看来,这是一种不必要的复杂方法。很多人不知道如何使用Android Cursor。我见过各种复杂的方法(检查 null、移动到第一个、移动到索引...),但这是最简单的方法:

try {
    // Loop while there are records on the Cursor
    while (cursor.moveToNext()) {
       EnderecoOficina item = new EnderecoOficina(i++,
                cursor.getString(0),
                cursor.getString(1),
                cursor.getString(2));
        lista.add(item);
    }
} finally {
    // Make sure the cursor is closed no matter what
    cursor.close();
}

无需检查空游标,Android游标API永远不会returns空游标。您还需要在完成后关闭 Cursor。