升级Room至最新版改用KSP后,查询Int类型ID编译报错
解决Room KSP生成代码中int与null比较的编译错误
以下是几个可行的解决方案:
修改DAO返回类型为可空类型
将DAO方法的返回类型从Single<Int>改为Single<Int?>,KSP会生成Integer包装类型的变量替代基本类型int,这样就能合法执行null比较逻辑。同时查询无结果时会返回null而非默认的0,可在订阅阶段处理空值场景:@Query("SELECT ${ExpeditionEntity.ColumnId} FROM ${ExpeditionEntity.TableName} LIMIT 1") fun getExpeditionId(): Single<Int?>升级Room及KSP依赖版本
该问题属于Room KSP代码生成器的已知bug,将Room核心库、KSP插件及相关依赖升级到最新稳定版本,多数此类代码生成问题已在后续版本中修复。手动实现查询逻辑绕过自动生成
如果需要保持原有返回类型且依赖特定空判断逻辑,可手动实现查询逻辑,避免使用Room自动生成的代码:fun getExpeditionId(): Single<Int> { return Single.fromCallable { val cursor = db.rawQuery( "SELECT ${ExpeditionEntity.ColumnId} FROM ${ExpeditionEntity.TableName} LIMIT 1", null ) try { if (cursor.moveToFirst()) { cursor.getInt(0) } else { throw EmptyResultSetException("Query returned empty result set") } } finally { cursor.close() } } }
内容的提问来源于stack exchange,提问作者masztalski
相关产品推荐
相关产品推荐

