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

时间:2019-07-10 15:35:24

标签: java android android-room

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

DAO

@Dao
public interface AlarmDao {

    .....

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    long insertAll(AlarmEntity...alarms); //used long instead of void
}

ENTITY

@Entity(tableName = "tb_alarm")
public class AlarmEntity {

    @PrimaryKey(autoGenerate = true)
    private long id;

    ...

    public long getId(){
        return this.id;
    }
}

但是构建失败,并且出现了指向我的Dao类的错误,错误是:

  

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

我错过了什么?

4 个答案:

答案 0 :(得分:3)

AlarmEntity...alarms

这翻译成多个插入。因此,返回类型应为List<Long>long[],这很有意义。如果传递两个项目,则将获得两个id,每个新插入的行一个。

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

@Insert
long insert(AlarmEntity alarms);

答案 1 :(得分:1)

来自Accessing data using Room DAOs

  

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

fetch(url, { method: 'POST' }) .then(response => { // HTTP 301 response // HOW CAN I FOLLOW THE HTTP REDIRECT RESPONSE? if (response.redirected) { window.location.href = response.url; } }) .catch(function(err) { console.info(err + " url: " + url); }); 的返回类型更改为long []或List

答案 2 :(得分:1)

如果文档@Insert仅接收1个参数,则它可以返回long,这是插入项的新rowId。如果参数是数组或集合,则应返回long[]List<Long>。 如果您有一个参数列表,则应返回long[]List<Long> 来源:https://developer.android.com/training/data-storage/room/accessing-data#java

答案 3 :(得分:1)

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

错误

@Insert
suspend fun insert(vararg client: Client): Long

正确

@Insert
suspend fun insert(client: Client): Long