gpt4 book ai didi

android - Ormlite SQLiteCursor : close cursor on null twice or more

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:39:41 25 4
gpt4 key购买 nike

我有 Coach 类,其中包含 ScheduleEntity 对象的集合;

public class Coach{

@ForeignCollectionField(columnName = FIELD_SCHEDULE_ENTITY)
private Collection<ScheduleEntity> scheduleEntities;
}

[...]

public class ScheduleEntity {

@DatabaseField(columnName = FIELD_COACH, foreign = true)
private Coach coach;
}

我想为教练检索第一个 ScheduleEntity

当我使用 QueryBuilder 时:

public ScheduleEntity getFirstScheduleForCoach(Coach coach) throws SQLException {
QueryBuilder<ScheduleEntity, Long> queryBuilder = scheduleEntityDao.queryBuilder();
queryBuilder
.where()
.eq(ScheduleEntity.FIELD_COACH, coach);
return scheduleEntityDao.queryForFirst(queryBuilder.prepare());

logcat中出现一些奇怪的信息:

Close cursor android.database.sqlite.SQLiteCursor@42321aa0 on null twice or more

然而,当我以另一种方式进行时:

return scheduleEntityDao.queryForEq(ScheduleEntity.FIELD_COACH, coach).iterator().next();

一切都很好(不关心可能的空指针)。

这些信息是什么意思?我做错了什么还是只是正常行为?

最佳答案

我继续下载 ORMLite 的代码。

在第 89 行的 AndroidCompiledStatement 类中,我将 close 方法更改如下:

之前

public void close() throws IOException {
if (cursor != null) {
try {
cursor.close();
} catch (android.database.SQLException e) {
throw new IOException("Problems closing Android cursor", e);
}
}
cancellationHook = null;
}

之后

public void close() throws IOException {
if (cursor != null && !cursor.isClosed()) {
try {
cursor.close();
} catch (android.database.SQLException e) {
throw new IOException("Problems closing Android cursor", e);
}
}
cancellationHook = null;
}

简单地检查光标是否已经关闭对我来说几乎解决了这个问题,尽管你必须将 ormlite-android git 克隆到你的项目中。

关于android - Ormlite SQLiteCursor : close cursor on null twice or more,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25245249/

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