我有两个按钮。一个用于前一个,一个用于下一个sqlite数据库记录。
以下是我试图从数据库中获取下一条记录的方法。
public long getNext(int id,DataBaseHelper helper){
Story story = new Story();
Cursor cursor = story.getStories(helper, 0);
//Updated code
cursor.moveToPosition(id);
cursor.moveToNext();
return cursor.getLong(1);
//Updated code
}
问题是,如果我通过的前一个位置是“1”,我得到的下一个位置是“3”。为什么跳过一条记录?它每次都不断跳过一条记录。请告诉我,如果我做错了什么,因为我是新手,我到处寻找,但这个具体问题似乎正在发生在我身上。
更新:编辑代码以显示更好的方法(可能)
答案 0 :(得分:0)
请记住,Cursor.getPosition()
从0开始计数。因此,第一条记录位于索引#0,第二条记录位于索引#1,...
查看官方文档:Cursor.moveToPosition(int position)
让我们来看看您的代码:
( id = 1 ,例如)
cursor.moveToPosition(id);
// Cursor is now on the record #1, so the second one of the list
cursor.moveToNext();
// Cursor is now on the record id+1 = #2, so the third one of the list
return cursor.getLong(1);
// Returns the value of the colon #1 of the third record
// of the list : so the record at the index #2
答案 1 :(得分:0)
确定。这方法我有点不对劲。我忽略了游标索引从-1开始并且我的表的数据库索引从1开始的事实。所以我不得不从id
变量中减去-1并且它解决了问题:)这是代码对我有用。
public long getNext(int id,DataBaseHelper helper){
id = id - 1;
Story story = new Story();
Cursor cursor = story.getStories(helper, 0);
//Updated code
cursor.moveToPosition(id);
cursor.moveToNext();
return cursor.getLong(1);
//Updated code
}