gpt4 book ai didi

android - 我是否负责关闭传递给自定义 CursorWrapper 类构造函数的游标?

转载 作者:行者123 更新时间:2023-11-29 23:44:56 27 4
gpt4 key购买 nike

我创建了一些 CursorWrapper 类

public class DogsCursorWrapper extends CursorWrapper {
public DogsCursorWrapper(Cursor cursor) {
super(cursor);
}

public Dog getDog() {
Dog dog = new Dog();
dog.setDogId(getInt(getColumnIndex(DogTable.ID)));
dog.setDogName(getString(getColumnIndex(DogTable.NAME)));
dog.setDogKind(getString(getColumnIndex(DogTable.KIND)));
return dog;
}
}

然后我使用 queryDogs 方法填充一个游标,然后返回一个包装类的实例

private DogsCursorWrapper queryDogs() {
Cursor simpleCursor = db.query(
DogTable.TABLE_NAME, null,null,null,null,null,null);
DogsCursorWrapper dogsCursor = new DogsCursorWrapper(simpleCursor);
// simpleCursor.close(); // this line causes an error in runtime
return dogsCursor;
}

下一步我在下面的方法中调用上面的方法:

private void loadDogs() {
DogsCursorWrapper dogsCursor;
dogs = new ArrayList<>();
try {
dogsCursor = queryDogs();
dogsCursor.moveToFirst();
while (!dogsCursor.isAfterLast()) {
dogs.add(dogsCursor.getDog());
dogsCursor.moveToNext();
}
} finally {
dogsCursor.close();
}
}

事实上,我确实在上一个方法中关闭了 dogsCursor,我的问题是:我没有错过一些我必须关闭的游标吗?需要明确的是,我对 queryDogs 方法中的 simpleCursor 有一些疑问。我应该关闭那个吗?

以这种方式使用自定义 DogsCursorWrapper 类的决定是否正确?非常感谢!

最佳答案

被注释掉的行:

// simpleCursor.close(); // this line causes an error in runtime

是不必要的。我想你是在问:它会复制光标吗?答案是不。游标包装器使用传入的游标。

最简单的验证方法是:

private DogsCursorWrapper queryDogs() {
Cursor simpleCursor = db.query(
DogTable.TABLE_NAME, null,null,null,null,null,null);
DogsCursorWrapper dogsCursor = new DogsCursorWrapper(simpleCursor);
simpleCursor.close(); // this line causes an error in runtime
if (dogsCursor.isClosed()) { // Because of this
Log.w(TAG, "Houston we have a problem...");
}
return dogsCursor;
}

运行此代码表明关闭原始游标也会关闭 CursorWrapper 持有的游标。

关于android - 我是否负责关闭传递给自定义 CursorWrapper 类构造函数的游标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51516303/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com