如果cursor.moveToFirst()
返回false,我还需要关闭吗?
因为当光标为空时它返回false。
我怀疑正确的方法:
if (cursor != null && cursor.moveToFirst()) {
// some code
cursor.close();
}
或者:
if(cursor != null) {
if (cursor.moveToFirst()) {
// some code
}
cursor.close();
}
答案 0 :(得分:2)
您必须关闭所有非空的Cursors
,无论它们是否已填充条目。
上述声明的唯一例外是,如果您知道相关的Cursor
由某个“外部”框架管理,并且会在没有您的互动的情况下自动关闭({{1}的情况)与LoaderManager
)一起使用的框架。
关闭任何非空CursorLoader
至少两个(好的)原因:
Cursor
可以有“内存分配”,即使它们是空的,也需要明确释放(如Cursors
所示)AbstractWindowedCursor
,则空Cursor
可能变为非空。您明确阻止此操作的方法是关闭requery()
最普遍且容易出错的方法是(在某些情况下这是一种过度杀伤):
Cursor
如果您需要迭代Cursor c;
try {
// Assign a cursor to "c" and use it as you wish
} finally {
if (c != null) c.close();
}
条目,则另一种流行模式:
Cursor's
通过一次额外的if (c != null && c.moveToFirst()) {
do {
// Do s.t. with the data at current cursor's position
} while (c.moveToNext());
}
if (c != null) c.close();
比较不要感觉不好 - 在这些情况下这是完全合理的。
答案 1 :(得分:0)
关闭“空”光标不会伤害您的应用,无论如何都要打电话。
理论上,如果你不关闭它就不会有任何影响,但无论如何都要关闭它,恕我直言。
答案 2 :(得分:0)
来自Cursor.moveToFirst()
的官方文档:
Move the cursor to the first row.
This method will return false if the cursor is empty.
它说如果Cursor
为空,它将返回false,而不是null。 Android如何知道光标是否为空?确实,它会打开所说的光标。
所以是的,你仍然需要关闭它。
答案 3 :(得分:0)
if (myCursor.moveToFirst()) {
do {
// work .....
} while (myCursor.moveToNext());
}
或者只是......
while (cursor.moveToNext()) {
// use cursor
}