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

我不明白,虽然这是获取新插入行的 ID 的方法。


DAO


@Dao

public 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类的错误,错误是:


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


我错过了什么?


隔江千里
浏览 142回答 7
7回答

慕妹3146593

AlarmEntity...alarms这转化为多个插入。所以返回类型应该是 aList<Long>或 a&nbsp;long[],这是有道理的。如果您传递两个项目,您将获得两个 id,每个新插入的行一个。如果您只想一次插入 1 项,请删除varargs(&nbsp;...)。例如@Insert long&nbsp;insert(AlarmEntity&nbsp;alarms);

汪汪一只猫

如果有人在 2021 年 12 月遇到此问题,我刚刚解决了我的问题,它可能与您的问题相同。事实上,kotlin 1.6.0 已经正式推出。但是,在稳定的 2.3.0 版本的 Room 中,它不包含与这个更新的 kotlin 一起工作的依赖项。我所做的是将我的房间更新为 2.4.0-rc01,这解决了我的问题!

慕斯王

就我而言,由于 vararg ,我遇到了同样的错误。删除它后,错误消失了。错误的@Insertsuspend fun insert(vararg client: Client): Long正确的@Insertsuspend fun insert(client: Client): Long

繁华开满天机

按照文档,如果该@Insert方法仅接收 1 个参数,它可以返回一个long,这是插入项目的新 rowId。如果参数是数组或集合,则应返回long[]or&nbsp;List<Long>。在您的情况下,您有一个列表作为参数,您应该返回long[]或List<Long>&nbsp;来源: https:&nbsp;//developer.android.com/training/data-storage/room/accessing-data#java

慕桂英546537

我没有上述问题,像这样的简单方法得到同样的错误@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"

墨色风雨

来自使用 Room DAO 访问数据:如果 @Insert 方法只接收 1 个参数,它可以返回一个 long,这是插入项的新 rowId。如果参数是数组或集合,则应返回 long[] 或 List。将 的返回类型更改insertAll ()为 long[] 或 List

有只小跳蛙

降级你的 build.gradle(project level) dependencies classpath oforg.jetbrains.kotlin:kotlin-gradle-plugin:1.6.0到org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.31dependencies {&nbsp; &nbsp; classpath "com.android.tools.build:gradle:7.0.3"&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; // Downgrade in your scenario. It will be 1.6.0, please change this to 1.5.31.&nbsp; &nbsp; classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.31'&nbsp; &nbsp;}&nbsp; &nbsp;&nbsp;
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java