每次我打开 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()
.
我的项目是"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()
.