LiveData никогда не обновляется - PullRequest
1 голос
/ 13 февраля 2020

В моем приложении я вставляю пару объектов "route", используя комнату. непосредственно после выполнения вставки приложение показывает новый экран, где мне нужны данные.

Проблема выглядит так, как будто вставка происходит после того, как новое представление уже создано, я вставляю данные с помощью ViewModel-> Repository - > DAO

На следующем экране я наблюдаю Данные

@Query("SELECT * from RouteEntity")
fun getRoutesAsLiveData(): LiveData<List<RouteEntity>>

Как мне "syn c", что вставка, которая, кажется, работает после того, как новый экран уже показан, вызывает наблюдается ливата?

1 Ответ

1 голос
/ 14 февраля 2020

Как я понимаю, вы хотите перейти к новому экрану сразу после вставки данных, а также хотите наблюдать за вновь вставленными данными из базы данных.

Вставка является асинхронной операцией, и вы можете иметь для ожидания обратного вызова подтверждения вставки, чтобы вывести пользователя на новый экран.

К сожалению, LiveData не поддерживает ответный вызов для операции вставки / удаления / обновления.

Согласно документам Google ( Источник ), поддержка LiveData недоступна для однократной записи / чтения. Я рекомендую Rx Java Single, обернутый объектом Long.

  @Insert(onConflict = OnConflictStrategy.REPLACE)
  fun insert(routeEntity: RouteEntity): Single<Long>

Где Long возвращает rowId для вставленного элемента. При таком подходе вы можете перевести пользователя на новый экран, когда получите ответ onSuccess () от Single.

...