Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 对于isBeforeFirst、isAfterLast、两者,空SQLite游标是否返回true?_Android_Sqlite - Fatal编程技术网

Android 对于isBeforeFirst、isAfterLast、两者,空SQLite游标是否返回true?

Android 对于isBeforeFirst、isAfterLast、两者,空SQLite游标是否返回true?,android,sqlite,Android,Sqlite,这是一个相当直截了当的问题。我希望答案是“两者皆有”,但我担心两者都没有。我仔细检查了Android开发者的文档,但是没有找到这个问题的明确答案 我要问的情况是,我在哪里得到一个游标,调用moveToFirst,然后循环直到isAfterLast返回true。对于我编写了几次代码的模式来说,如果它能够正常工作,那么它将非常方便。如果光标有0条记录,则执行循环0次 或者我需要先显式测试一个空游标吗 编辑:一些回答表明人们没有完全理解我的要求。基本上,我想写下: cursor = myDb.quer

这是一个相当直截了当的问题。我希望答案是“两者皆有”,但我担心两者都没有。我仔细检查了Android开发者的文档,但是没有找到这个问题的明确答案

我要问的情况是,我在哪里得到一个游标,调用
moveToFirst
,然后循环直到
isAfterLast
返回true。对于我编写了几次代码的模式来说,如果它能够正常工作,那么它将非常方便。如果光标有0条记录,则执行循环0次

或者我需要先显式测试一个空游标吗

编辑:一些回答表明人们没有完全理解我的要求。基本上,我想写下:

cursor = myDb.query(...)
cursor.moveToFirst()
while (!cursor.isAfterLast()) {
    processRow(...)
}
但我不是100%肯定我能做到
isAfterLast
对于这种情况只能返回true,但这并不意味着对于空查询它实际上返回true。除了
getCount
之外,如果游标为空,文档似乎没有指定大多数游标方法的返回值(实际上,Android文档在很多情况下似乎不具体)。所以我担心我需要这样做:

cursor = myDb.query(...)
if (cusror.getCount() > 0) {
    cursor.moveToFirst()
    while (!cursor.isAfterLast()) {
        processRow(...)
    }
}
这在逻辑上是多余的。请记住,在实际实现中有更多的代码,并且这些代码分布在多个方法中。其中一个答案是现在我需要检查光标是否为
null
,这是完全没有文档记录的


我只想知道当在空游标上调用时,是否有其他人知道
isAfterLast
的实际行为。

我不使用
isAfterLast
。我使用以下模式读取查询结果

    SQLiteDatabase db = new DbHelper().getWritableDatabase();
    String sql = "SELECT ...";
    String[] args = ...;
    Cursor cs = db.rawQuery(sql, args);
    while (cs.moveToNext()) {
        // cs.getXxx(0), cs.getXxx(1)
    }
    cs.close();
    db.close();

DbHelper
是一个类,当光标为空时,我从
SQLiteOpenHelper

扩展它

cursor.moveToFirst()返回false
cursor.isBeforeFirst()返回true
cursor.isAfterLast()返回true


因此,是的,您发布的第一个代码段可以在空游标上正常工作。

为什么不调用cursor.getCount()以了解游标是否有项。如果(cursor!=null),请尝试查找游标是否为空,然后您还可以像cursor.getCount()一样检查游标的计数。如果没有记录,则返回0。@Ilango@user37我知道如何检查光标是否有项目,问题是我是否可以避免此检查。我有一些代码需要为查询结果的每一行运行一次,如果有0个结果,那么我希望执行代码0次,即不执行任何操作。鉴于我有
而(!cursor.isAfterLast())
不必将整个内容包装在if块中会更干净,如果
isAfterLast
对于空光标将返回true。@Ben我无法理解你的问题。我不明白你到底需要什么?@Ilango我已经对我的问题添加了更多的解释,包括代码示例。你知道当查询返回0行时这是有效的(即跳过循环体,没有例外)吗?太棒了,谢谢。我接受这个答案(尽管我最初问题的答案仍然是我真正想要的,因为
是在最后一行
/
是在前一行
如果需要,请允许我将前进到下一行与检查筋疲力尽分离)。谢谢!这真的方便多了。但是如果没有可读取的行,cursor.getXXX()不会返回异常?@Ben:我同意你的实际问题仍然没有答案。那么,您是否发现返回
false
是否是检查空光标的可靠方法?