Kotlin - вернуть новый вставленный идентификатор из базы данных Room, используя Persistence Room: lib - PullRequest
0 голосов
/ 06 июля 2018

Я пытаюсь вставить запись пользователя в базу данных Room, используя Kotlin, и она работает отлично.

И теперь я хочу вернуть вновь вставленный идентификатор записи, чтобы проверить, успешно ли вставлена ​​запись в базу данных Room.

Но когда я применяю тип возврата Long в методе вставки и запускаю код, я получаю следующую ошибку.

ошибка: метод возвращает long, но должен возвращать одно из следующих: void, long[], java.lang.Long[], java.util.List<java.lang.Long>. Если Вы хотите вернуть список идентификаторов строк из запроса, вашей вставки метод может получить только 1 параметр.

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

Я использую эту библиотеку.

реализация "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()) 
        }
    }

Ответы [ 2 ]

0 голосов
/ 25 июля 2019

На основании документации здесь

Метод, аннотированный аннотацией @Insert, может вернуть:

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)
0 голосов
/ 06 июля 2018

Если вы вставляете несколько сущностей, вы можете получить их идентификаторы только в массиве или списке, например, так:

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

Если вы вставляете одну сущность за раз, вы можете получить ее идентификатор как Long:

@Insert
fun insertUser(userRegistrationEntity: UserRegistrationEntity): Long
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...