android - 房间数据库抛出 CursorWindowAllocationException
问题描述
最近,我开始面对这个例外。据我所知,当游标在事务后未关闭时会引发此异常。但是,Room 数据库在自动生成的 DaoImpl 代码中处理这个问题。我无法找出此异常的原因。这是堆栈跟踪:
Fatal Exception: android.database.CursorWindowAllocationException: Cursor window allocation of 2048 kb failed.
at android.database.CursorWindow.(CursorWindow.java:108)
at android.database.AbstractWindowedCursor.clearOrCreateWindow(AbstractWindowedCursor.java:226)
at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:148)
at android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:142)
at android.database.AbstractCursor.moveToPosition(AbstractCursor.java:219)
at android.database.AbstractCursor.moveToNext(AbstractCursor.java:268)
at android.arch.persistence.room.InvalidationTracker$1.checkUpdatedTable(InvalidationTracker.java:358)
at android.arch.persistence.room.InvalidationTracker$1.run(InvalidationTracker.java:329)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
at java.lang.Thread.run(Thread.java:764)
这是查询:
@Query("select * from PhoneEvent where event_type=:type and
client_created_timestamp>=:startTimestamp and
client_created_timestamp<:endTimestamp")
List<PhoneEvent> getAllPhoneEventsOfTypeAndBetween(String type,
long startTimestamp, long endTimestamp);
在 Dao_Impl 中,在这一行抛出异常:
final List<PhoneEvent> _result = new ArrayList<PhoneEvent>(_cursor.getCount());
解决方案
推荐阅读
- javascript - 如何使用 eel python 启动另一个窗口?
- r - dplyr:group_by,对各个列求和,并应用基于分组行总和的函数?
- mongodb - 如何使用父引用删除存储在 mongodb 中的子树
- javascript - 为画板中的每一层导出所有 Android 相关分辨率的脚本
- powerbi - Power BI:如何自定义排序
- flutter - 如何更改 Flutter 中的默认后退按钮图标?
- sql - oracle sql中删除行的顺序
- sql - 更新同一表中的特定列并添加限制 - PostgreSQL
- javascript - Javascript:从表单配置中提取验证对象
- symfony - 无法使用 webpack-encore 编译,webpack 需要版本 ^8.0.0