我的项目是"标题",项目编号不固定,因为用户通过编辑文本在数据库中放入了更多标题,所以它可以增加。
现在出于测试目的,我在数据库中放置了3个项目/标题,这里是我在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);
}
答案 0 :(得分:2)
我认为您假设query()
为您提供了之前获得的Cursor
对象,但对其进行了更新,以便为您上次查询时插入的项目提供行。事实并非如此。
对listAllNotes()
的每次调用都会在您的数据库上运行 new 查询,并且每个查询都会为您提供 new Cursor。这个新游标包含表的所有行,并始终位于第一行之前。然后你的代码移动到下一个位置(即第一行)并读取标题,它始终是数据库中的第一个标题。
您需要查询数据库一次并保留该Cursor,或者您需要记住上次查看的位置并使用Cursor.moveToPosition()
而不是moveToNext()
。