java - 光标没有移到第一个?

标签 java android sqlite arraylist android-studio

所以我构建了一个方法,该方法返回我在项目中使用的类的 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/

相关文章:

android - 无法在android中的SQLite中插入记录

c# - SQLiteNet 索引和 Lambda 表达式

android - Sqlite限制具有相同id的重复行

Java 19 预览版、Gradle 孵化器功能

java - 调用监听器时强制执行最大允许处理时间

java - 对于 Java Pet Store 应用程序,我应该使用 Java EE 6 还是坚持使用版本 5?

java - 解析奇怪的日期字符串?

Android 警报对话框列表

AndroidManifest.xml 中的 android:fullBackupOnly 是为了什么?

android - 我将如何创建一个 Spinner 以用作 Action Item?