Android数据库游标表现奇怪

时间:2013-06-27 07:52:29

标签: java android cursor

我有两个按钮。一个用于前一个,一个用于下一个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”。为什么跳过一条记录?它每次都不断跳过一条记录。请告诉我,如果我做错了什么,因为我是新手,我到处寻找,但这个具体问题似乎正在发生在我身上。

更新:编辑代码以显示更好的方法(可能)

2 个答案:

答案 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

}