为了账号安全,请及时绑定邮箱和手机立即绑定

房间错误:不确定如何处理插入方法的返回类型

房间错误:不确定如何处理插入方法的返回类型

隔江千里 2023-03-17 14:03:01
我不明白,虽然这是获取新插入行的 ID 的方法。DAO@Daopublic interface AlarmDao {    .....    @Insert(onConflict = OnConflictStrategy.REPLACE)    long insertAll(AlarmEntity...alarms); //used long instead of void}实体@Entity(tableName = "tb_alarm")public class AlarmEntity {    @PrimaryKey(autoGenerate = true)    private long id;    ...    public long getId(){        return this.id;    }}但是构建失败了,我得到了指向我的Dao类的错误,错误是:错误:不确定如何处理插入方法的返回类型。我错过了什么?
查看完整描述

7 回答

?
慕妹3146593

TA贡献1820条经验 获得超9个赞

AlarmEntity...alarms

这转化为多个插入。所以返回类型应该是 aList<Long>或 a long[],这是有道理的。如果您传递两个项目,您将获得两个 id,每个新插入的行一个。

如果您只想一次插入 1 项,请删除varargs...)。例如

@Insert
long insert(AlarmEntity alarms);


查看完整回答
反对 回复 2023-03-17
?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

如果有人在 2021 年 12 月遇到此问题,我刚刚解决了我的问题,它可能与您的问题相同。

事实上,kotlin 1.6.0 已经正式推出。但是,在稳定的 2.3.0 版本的 Room 中,它不包含与这个更新的 kotlin 一起工作的依赖项。

我所做的是将我的房间更新为 2.4.0-rc01,这解决了我的问题!


查看完整回答
反对 回复 2023-03-17
?
慕斯王

TA贡献1864条经验 获得超2个赞

就我而言,由于 vararg ,我遇到了同样的错误。删除它后,错误消失了。


错误的


@Insert

suspend fun insert(vararg client: Client): Long

正确的


@Insert

suspend fun insert(client: Client): Long


查看完整回答
反对 回复 2023-03-17
?
繁华开满天机

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


查看完整回答
反对 回复 2023-03-17
?
慕桂英546537

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"


查看完整回答
反对 回复 2023-03-17
?
墨色风雨

TA贡献1853条经验 获得超6个赞

来自使用 Room DAO 访问数据

如果 @Insert 方法只接收 1 个参数,它可以返回一个 long,这是插入项的新 rowId。如果参数是数组或集合,则应返回 long[] 或 List。

将 的返回类型更改insertAll ()为 long[] 或 List


查看完整回答
反对 回复 2023-03-17
?
有只小跳蛙

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'   

}    


查看完整回答
反对 回复 2023-03-17
  • 7 回答
  • 0 关注
  • 118 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信