Kotlin-使用Persistence Room:runtime lib从Room数据库返回新插入的ID

vik*_*ngh 3 android persistence kotlin android-room

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

现在,我想返回新插入的记录ID,以检查是否在Room数据库中成功插入了一条记录。

但是,当我在insert方法中应用Long返回类型并在那时运行代码时,出现以下错误。

错误:方法返回的时间很长,但是应该返回以下值之一: void, long[], java.lang.Long[], java.util.List<java.lang.Long>。如果要从查询返回行ID列表,则插入方法只能接收1个参数。

public abstract long insertUser(@org.jetbrains.annotations.NotNull()
Run Code Online (Sandbox Code Playgroud)

我正在使用这个库。

实现“ android.arch.persistence.room:运行时:1.0.0”

kapt "android.arch.persistence.room:compiler:1.0.0"
Run Code Online (Sandbox Code Playgroud)

这是我的插入查询。

@Insert
fun insertUser(vararg userRegistrationEntity: UserRegistrationEntity):Long;
Run Code Online (Sandbox Code Playgroud)

这是我的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()) 
        }
    }
Run Code Online (Sandbox Code Playgroud)

zsm*_*b13 7

如果要插入多个实体,则只能将它们的ID返回到数组或列表中,例如,如下所示:

@Insert
fun insertUsers(vararg userRegistrationEntities: UserRegistrationEntity): List<Long>
Run Code Online (Sandbox Code Playgroud)

如果您一次插入一个实体,则可以将其ID重新获取为Long

@Insert
fun insertUser(userRegistrationEntity: UserRegistrationEntity): Long
Run Code Online (Sandbox Code Playgroud)

  • 如果你想使用 `Long`,你需要删除 `vararg` 并且只插入一个元素,如我上面所示。 (2认同)