所以我构建了一个方法,该方法返回我在项目中使用的类的 ArrayList,问题是添加到 ArrayList 的唯一项目是数据库中的第二个项目。我知道这是因为我提取了 DB 文件并浏览了它,并且 'c.getCount()' 返回值 2。
所以我知道我的数据库包含 2 个条目,我的光标获得 2 个条目......但出于某种原因,他选择在我创建它后开始关注第二行 - 从而退出 while 循环,甚至以为我调用了 c.moveToFirst();
也许我只是累了,没有清楚地看到我做错了什么...因为我将它与代码中运行良好的其他方法进行了比较,但我无法区分它们之间的区别。
我的方法如下所示:
public ArrayList<Kiosk> getKiosks () {
ArrayList<Kiosk> kioskArrayList = new ArrayList<>();
db = dbHandler.getWritableDatabase();
String[] columns = {Tags.TAG_LOCAL_ID, Tags.TAG_ID_SERVER, Tags.TAG_NAME,
Tags.TAG_PHONE_NUMBER, Tags.TAG_CONTACT_NAME, Tags.TAG_SCHOOL_ID};
Cursor c = db.query(DatabaseHandler.TABLE_KIOSK, columns, null, null, null, null, null);
c.moveToFirst();
Log.i("tagg", "Size of the cursor is: " + c.getCount());
while (c.moveToNext()) {
Kiosk kiosk = new Kiosk();
kiosk.setLOCAL_ID(c.getInt(c.getColumnIndex(Tags.TAG_LOCAL_ID)));
kiosk.setIdServer(c.getInt(c.getColumnIndex(Tags.TAG_ID_SERVER)));
kiosk.setName(c.getString(c.getColumnIndex(Tags.TAG_NAME)));
kiosk.setPhoneNumber(c.getString(c.getColumnIndex(Tags.TAG_PHONE_NUMBER)));
kiosk.setContactName(c.getString(c.getColumnIndex(Tags.TAG_CONTACT_NAME)));
kiosk.setSchoolId(c.getInt(c.getColumnIndex(Tags.TAG_SCHOOL_ID)));
c.moveToNext();
kioskArrayList.add(kiosk);
Log.w("taggg", "Added this to the kiosk Array: " + kiosk.getName() +
"Local ID: " + kiosk.getLOCAL_ID());
}
Log.w("tagg", "getKioskhere, size of the array I sent is: " + kioskArrayList.size());
c.close();
db.close();
return kioskArrayList;
}
我的日志清楚地表明光标的大小是 2,但 ArrayList 是 1:
03-11 14:18:37.334: W/(18369): School id of the client is: 1
03-11 14:18:37.336: I/(18369): Size of the cursor is: 2
03-11 14:18:37.336: W/(18369): Added this to the kiosk Array: PitaKioskLocal ID: 2
03-11 14:18:37.336: W/(18369): getKioskhere, size of the array I sent is: 1
有什么建议吗?提前致谢
最佳答案
您首先移动到第一个元素:
c.moveToFirst();
然后,在处理第一个之前,您会转到第二个:
while (c.moveToNext()) {
最后,你打电话
c.moveToNext();
在 while 循环中,这会导致忽略第二个条目。
解决方案:删除循环内的调用,并在处理第二个元素之前处理第一个元素。最简单的方法是将 while(){}
更改为 do{} while()
。
关于java - 光标没有移到第一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28989792/