При вставке данных с помощью Room в Android возвращайте Single <Long> вместо Long

Я вставляю данные в базу данных SQLite с помощью Room, как показано ниже. Запросы на вставку могут возвращать пустые, длинные или длинные массивы. Есть ли способ получить Single, поскольку я использую RxJava для вставки и извлечения объектов в рабочем потоке.

@Insert(onConflict = OnConflictStrategy.REPLACE)
fun addNotification(notification: Notification): Single<Long>

Методы, помеченные @Insert, могут возвращать либо void, long, Long, long[], Long[], либо List<Long>. Итак, я думаю, что у вашего дела в настоящее время нет решения.

NamNH 09.07.2018 12:52

AFAIK, это не поддерживается. С Room причина реактивных типов возврата (в частности, Observable и LiveData) заключается не в потоках, а в доставке обновлений. Это имеет смысл только для запросов, где изменения данных вызывают изменения результатов запроса, которые, возможно, потребуется повторно доставить.

CommonsWare 09.07.2018 12:58
0
2
1 099
1

Ответы 1

Начиная с версии 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")

Другие вопросы по теме