Kotlin - return 使用 Persistence Room:runtime 库从 Room 数据库中新插入的 ID

Kotlin - return new inserted id from Room database using Persistence Room:runtime lib

我正在尝试使用 Kotlin 在 Room 数据库中插入用户记录,它运行良好。

现在我想return新插入的记录id来检查记录是否成功插入到Room数据库中。

但是当我应用 Long return 输入插入方法和 运行 代码时,我收到以下错误。

error: Method returns long but it should return one of the following: void, long[], java.lang.Long[], java.util.List<java.lang.Long>. If you want to return the list of row ids from the query, your insertion method can receive only 1 parameter.

public abstract long insertUser(@org.jetbrains.annotations.NotNull()

我正在使用这个库。

implementation "android.arch.persistence.room:runtime:1.0.0"

kapt "android.arch.persistence.room:compiler:1.0.0"

这是我的插入查询。

@Insert
fun insertUser(vararg userRegistrationEntity: UserRegistrationEntity):Long;

这是我的 addAsyncTask,我要在 Room 数据库中插入一条记录

private fun userRegistration(userRegistrationEntity: UserRegistrationEntity) {
        addAsyncTask(appDatabase!!).execute(userRegistrationEntity) 
    }

    private class addAsyncTask constructor(private val appDatabase: AppDatabase) : AsyncTask<UserRegistrationEntity, Void, Long>() {
        override fun doInBackground(vararg params: UserRegistrationEntity): Long? {
           // val a = appDatabase.userRegistrationDao().addUser(params[0]);
            val newReturnId = appDatabase.userRegistrationDao().insertUser(params[0]);
            return newReturnId
        }

        override fun onPostExecute(result: Long?) {
            super.onPostExecute(result)
            Log.d("value", result.toString()) 
        }
    }

如果要插入多个实体,则只能在数组或列表中取回它们的 ID,例如,像这样:

@Insert
fun insertUsers(vararg userRegistrationEntities: UserRegistrationEntity): List<Long>

如果您一次插入一个实体,您可以获得其 ID 作为 Long:

@Insert
fun insertUser(userRegistrationEntity: UserRegistrationEntity): Long

基于文档here

用@Insert注解注解的方法可以return:

long for single insert operation
long[] or Long[] or List<Long> for multiple insert operations
void if you don't care about the inserted id(s)