Как получить обратный звонок, когда в комнате завершено удаление или добавление предмета? - PullRequest
0 голосов
/ 05 октября 2019

Я хочу отправить запрос сразу после того, как Комната закончила удаление или добавление какого-либо элемента / элементов. Для базы данных я использую room + aliveata, но для добавления / удаления элемента я использую doAsync. Как я могу получить обратный вызов, когда удаление / добавление элемента завершено?

Примеры добавления / удаления и получения в моей базе данных

@Insert(onConflict = OnConflictStrategy.REPLACE)
fun saveUser(user: SavedUserModel)

@Query("SELECT * FROM SavedUserModel")
fun getUser(): List<SavedUserModel>

@Query("DELETE FROM SavedShoppingListModel WHERE id LIKE :id")
fun deleteById(id: String)

Ответы [ 2 ]

1 голос
/ 05 октября 2019

Вы можете вернуть Int после удаления или обновления. Значение будет количеством затронутых строк. После простого программирования return вы знаете, что выполнение метода завершено. Проверьте эту ветку, чтобы получить больше ответов, набравших наибольшее количество голосов.

Или вы можете использовать Room + RxJava и вернуть Completable и посмотреть состояние завершения вметод onComplete. Это более сладкое решение IMO. Но первое решение также сработало бы, я думаю.

Я думаю, что если вы также вернете LiveData<List<T>> из запроса выбора, ваше удаление сможет быть обнаружено из комнаты. Не совсем уверен в этом последнем.

РЕДАКТИРОВАТЬ: Как упомянуто в комментариях @CommonsWare, у вас есть другой вариант - сопрограммы. Отметьте методы как suspend ed, а затем перейдите к пункту 1 этого ответа.

0 голосов
/ 05 октября 2019

Вы можете обновить свой запрос следующим образом:

@Query("SELECT * FROM SavedUserModel")
fun getUser():Observable<List<SavedUserModel>>
/*or use Single if it's a one time thing*/

, а затем в viewModel или везде, куда идет логика

getUser()
.subscribeOn(Schedulars.io())
.observeOn(AndroidSchedulars.mainThread())
.subscribe(
{
/*query succeed you have the List<SavedUserModel> as it*/
},{
/*query failed , you have throwable as it*/
})

Вы также можете использовать onSuccess и onError но тогда вам нужно позвонить subscribe.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...