我的光标有问题。我创建了一个警报管理器,它可以选择一个值来与循环中的另一个进行比较。
我的问题是这样的:如果光标在循环之外,那么只选择我的first
值(如果exsist只有一个值明显选择这个)....如果光标在循环中,这个只选择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();
提前感谢!
答案 0 :(得分: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();
}
这会突破你的循环,为你正在寻找的项目设置值。
就个人而言,这是一个很大的计算开销,我只是让查询直接查找比较值,然后检查并查看返回的游标是否为空。更简单。
答案 1 :(得分:0)
我不明白你的问题,但对我来说很奇怪的是:while(c5.isAfterLast() == false){
您是否尝试过while (c5.moveToNext()) {
并删除c5.moveToFirst();
?
答案 2 :(得分:0)
您应该知道,如果您的光标值超过一个,则覆盖tipe
,status
和number
的值。
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();