每次我打开 Activity,光标移动到下一条记录

Every time i open an Activity, the Cursor moves to next record

我的项目是"title",项目数量不固定,它可以增加,因为用户通过编辑文本将更多标题放入数据库中。

现在出于测试目的,我将 3 items/titles 放入数据库中,这是我在 activityB onCreate() 中使用的代码,因为现在每次我从 ActivityA 移动到 ActivityB 时,日志打印我在数据库中的第一个项目.. 我希望它总是取下一个项目,最后取回第一个项目并再次上升。

/** GET NEXT TITLE FROM DATABASE */
    DatabaseConnector dbConnector = new DatabaseConnector(ActivityB.this);
    dbConnector.open();
    Cursor c = dbConnector.ListAllNotes();

    if (c != null && c.moveToNext()) {
        var = c.getString(c.getColumnIndex("title"));

        Log.d("THIS:", c.getString(c.getColumnIndex("title")));

    }else if(c != null){
        c.moveToFirst();
        var = c.getString(c.getColumnIndex("title"));

        Log.d("THIS:", c.getString(c.getColumnIndex("title")));

    }else{
        Toast.makeText(this, "NO DATA IN DATABASE YET", Toast.LENGTH_LONG).show();
    }
    dbConnector.close();

根据要求这是 DatabaseConnector.ListAllNotes() 在变量 TITLE 变量声明如下:private static final String TITLE = "title";

// List all data function
public Cursor ListAllNotes() {
    return database.query(TABLE_NAME, new String[] { ID, TITLE }, null,
            null, null, null, TITLE);
}

我认为您假设 query() 给您的 Cursor object 与您之前得到的相同,但将其更新为包含自您上次查询以来插入的项目的行.事实并非如此。

每次调用 listAllNotes() 都会在您的数据库上运行一个 new 查询,并且每个查询都会为您提供一个 new 游标。这个新游标具有 table 的所有行,并且始终位于第一行之前。然后你的代码移动到下一个位置(即第一行)并读取标题,它始终是你数据库中的第一个标题。

您需要查询数据库 一次 并按住该光标,或者您需要记住上次查看的位置并使用 Cursor.moveToPosition() 而不是 moveToNext().