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。
我的查询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。