LiveData из базы данных не вызывает Transformations.switchMap - PullRequest
0 голосов
/ 26 февраля 2020

Недавно я начал объединять мое приложение с LiveData и Room. После проверки документа в android разработчик:

Transformations.switchMap

будет запускаться всякий раз, когда mAppPkgList изменено. Когда я вставил новую запись в базу данных, mAppPkgList изменился, но Transformations.switchMap не сработал. Это реализация.

    ViewModel class
        public LiveData<List<Info>> mAppPkgList = new MutableLiveData<>(null);
        public LiveData<List<Info>> mAppList = Transformations.switchMap(mAppPkgList, list->{
            SLog.v(TAG,"Transformations.switchMap");
            List<Info> retArr = new ArrayList<>();
            //custom logic
            MutableLiveData<List<Info>> ret = new MutableLiveData<>();
            ret.setValue(retArr);
            return ret;
        });
    ...
    mAppPkgList  = appDAO.getInfo(id)

Это код в DAO.

@DAO
@Query("SELECT * from pkg WHERE id=:id")
    LiveData<List<Info>> getInfo(int id);

...

Не могли бы вы помочь мне вызвать Преобразования .switchMap всякий раз, когда я вставляю новую запись в базу данных? Заранее спасибо

1 Ответ

0 голосов
/ 02 марта 2020

Чтобы вызвать mAppList всякий раз, когда в таблицу вставляется новая строка, вам необходимо наблюдать весь контент таблицы, например:

Dao:

@Query("SELECT * FROM pkg") fun getAllInfos(): LiveData<List<Info>>

ViewModel:

val allInfos = appDAO.getAllInfos() val mAppList = Transformations.switchMap(allInfos, { infos -> ... })

Таким образом, mAppList всегда будет запускаться, если содержимое таблицы изменяется (новые строки добавляются / удаляются или изменяются)

...