Так что мне нужно получить идентификатор вставленного элемента обратно из функции вставки. Несколько источников, включая этот от Google, говорят, что это можно сделать через Single в качестве возвращаемого значения аннотированной функции DAO @Insert. К сожалению, компиляция всегда завершается с:
xxx\CarDao.java:19: error: Not sure how to handle insert method's return type.
public abstract java.lang.Object insert(@org.jetbrains.annotations.NotNull()
Я пытался изменить его на Maybe , Single и др c. но это всегда одна и та же ошибка.
Мой код выглядит так:
import androidx.lifecycle.LiveData
import androidx.room.*
import io.reactivex.Single
@Dao
interface CarDao {
@Query("SELECT * FROM cars")
fun getAll(): LiveData<List<Car>>
@Query("SELECT * FROM cars WHERE uid = :uid")
fun getById(uid: Int): Single<List<Car>>
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insert(car: Car): Single<Long>>
@Query("DELETE FROM cars WHERE uid = :uid")
suspend fun deleteById(uid: Int)
}
Я совершенно не понимаю, что является причиной этого. Так что же я делаю не так, и если это просто ошибка, какой будет обходной путь для получения идентификатора в контексте моей активности и данных об этой деятельности?
ОБНОВЛЕНИЕ: найдено очень странное решение: когда я удаляю ключевое слово suspend компилируется без проблем. Тогда проблема становится невозможностью доступа к базе данных из основного потока. Почему это работает без приостановки, но не с приостановкой?