-1

我的光标有问题。我创建了一个警报管理器,它选择一个值以在循环中与另一个值进行比较。

我的问题是:如果光标在循环之外,则仅选择我的first值(如果仅存在一个值,则显然仅选择此值)....如果光标在循环中,则仅选择last值(如果仅存在一个显然只选择这个值)。

如何解决这个问题?

我的查询:

public Cursor getRegistry2()
    {
        return (getReadableDatabase().query(
            TabRegistry.TABLE_NAME, 
            TabRegistry.COLUMNS, 
            TabRegistry._ID, 
            null,
            null, 
            null, 
            null));

我的光标在服务中:

 Cursor c5 = databaseHelper.getRegistry2();
                     c5.moveToFirst();
                        while(c5.isAfterLast() == false){   
                            tipe = c5.getString(c5.getColumnIndex(TabRegistry.TYPE)); 

                            status = c5.getString(c5.getColumnIndex(TabRegistry.STATUS)); 
                            number = c5.getString(c5.getColumnIndex(TabRegistry.NUMBER)); 
                        c5.moveToNext();
                        }
                       c5.close(); 

提前致谢!

4

3 回答 3

2

正如我在评论中提到的,如果你真的想找到一个特定的项目,你需要真正寻找它。

假设您要比较状态,您可以这样做:

while(c5.isAfterLast() == false){   
    tipe = c5.getString(c5.getColumnIndex(TabRegistry.TYPE)); 
    status = c5.getString(c5.getColumnIndex(TabRegistry.STATUS)); 
    number = c5.getString(c5.getColumnIndex(TabRegistry.NUMBER)); 
    if (status.equals(comparisonString)){
        break;
    }
    c5.moveToNext();
}

这将打破您的循环,为您正在寻找的项目设置您的值。

就个人而言,这是很多计算开销,我只需进行查询以直接查找比较值,然后检查返回的游标是否为空。简单得多。

于 2012-04-24T15:55:04.107 回答
0

您应该知道您正在覆盖的值tipe,以防您的光标的值超过一个。statusnumber

Cursor c5 = databaseHelper.getRegistry2();
if(c5.moveToFirst()){
 do{   
    tipe = c5.getString(c5.getColumnIndex(TabRegistry.TYPE)); 

    status = c5.getString(c5.getColumnIndex(TabRegistry.STATUS)); 
    number = c5.getString(c5.getColumnIndex(TabRegistry.NUMBER));
 }while(c5.moveToNext());
}
c5.close();
于 2012-04-24T15:49:48.553 回答
0

我不明白你的问题,但对我来说很奇怪的是:while(c5.isAfterLast() == false){

您是否尝试过替换while (c5.moveToNext()) {和删除c5.moveToFirst();

于 2012-04-24T15:44:08.440 回答