Я вставляю данные в базу данных SQLite с помощью Room, как показано ниже. Запросы на вставку могут возвращать пустые, длинные или длинные массивы. Есть ли способ получить Single, поскольку я использую RxJava для вставки и извлечения объектов в рабочем потоке.
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun addNotification(notification: Notification): Single<Long>
AFAIK, это не поддерживается. С Room причина реактивных типов возврата (в частности, Observable и LiveData) заключается не в потоках, а в доставке обновлений. Это имеет смысл только для запросов, где изменения данных вызывают изменения результатов запроса, которые, возможно, потребуется повторно доставить.
Начиная с версии 2.1.0-alpha01, аннотированный метод @Insert может возвращать Single.
Additional Rx Return Types Support: DAO methods annotated with @Insert, @Delete or @Update now support Rx return types Completable, Single and Maybe. b/63317956
Источник: https://developer.android.com/jetpack/androidx/releases/room#2.1.0-alpha01
Итак, вам просто нужно использовать последнюю доступную версию, и вы готовы к работе:
implementation("androidx.room:room-rxjava2:2.1.0-alpha06")
Методы, помеченные
@Insert, могут возвращать либоvoid, long, Long, long[], Long[], либоList<Long>. Итак, я думаю, что у вашего дела в настоящее время нет решения.