7 回答
TA贡献1820条经验 获得超9个赞
AlarmEntity...alarms
这转化为多个插入。所以返回类型应该是 aList<Long>
或 a long[]
,这是有道理的。如果您传递两个项目,您将获得两个 id,每个新插入的行一个。
如果您只想一次插入 1 项,请删除varargs
( ...
)。例如
@Insert long insert(AlarmEntity alarms);
TA贡献1898条经验 获得超8个赞
如果有人在 2021 年 12 月遇到此问题,我刚刚解决了我的问题,它可能与您的问题相同。
事实上,kotlin 1.6.0 已经正式推出。但是,在稳定的 2.3.0 版本的 Room 中,它不包含与这个更新的 kotlin 一起工作的依赖项。
我所做的是将我的房间更新为 2.4.0-rc01,这解决了我的问题!
TA贡献1864条经验 获得超2个赞
就我而言,由于 vararg ,我遇到了同样的错误。删除它后,错误消失了。
错误的
@Insert
suspend fun insert(vararg client: Client): Long
正确的
@Insert
suspend fun insert(client: Client): Long
TA贡献1816条经验 获得超4个赞
按照文档,如果该@Insert
方法仅接收 1 个参数,它可以返回一个long
,这是插入项目的新 rowId。如果参数是数组或集合,则应返回long[]
or List<Long>
。在您的情况下,您有一个列表作为参数,您应该返回long[]
或List<Long>
来源: https: //developer.android.com/training/data-storage/room/accessing-data#java
TA贡献1848条经验 获得超10个赞
我没有上述问题,像这样的简单方法得到同样的错误
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun upsert(user: User): Long
我通过将房间库更新到可用的最新版本解决了这个问题。就我而言,最新版本是 2.3.0,所以我改为:
implementation "androidx.room:room-runtime:2.3.0"
implementation "androidx.room:room-ktx:2.3.0"
kapt "androidx.room:room-compiler:2.3.0"
TA贡献1853条经验 获得超6个赞
如果 @Insert 方法只接收 1 个参数,它可以返回一个 long,这是插入项的新 rowId。如果参数是数组或集合,则应返回 long[] 或 List。
将 的返回类型更改insertAll ()
为 long[] 或 List
TA贡献1824条经验 获得超8个赞
降级你的 build.gradle(project level) dependencies classpath of
org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.0
到
org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.31
dependencies {
classpath "com.android.tools.build:gradle:7.0.3"
// Downgrade in your scenario. It will be 1.6.0, please change this to 1.5.31.
classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.31'
}
添加回答
举报