我不明白,尽管这是获取新插入的行的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
类的错误,错误是:
错误:不确定如何处理插入方法的返回类型。
我错过了什么?
答案 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