Два объекта в живых данных ссылаются друг на друга - PullRequest
0 голосов
/ 18 марта 2020

У меня есть два Объекта (Объект1 и Объект2), сохраненные через Android Комнату, к которой я хочу получить доступ, используя LiveData . Object1 содержит ссылку на Object2.

public class Object1 {

...

private Object2 object2;

...

}

Я хочу передать LivaData<List<Object1>>, содержащий все мои объекты из ViewModel, в действия, каждый из которых Object1 уже поднял, сохранил ссылку на соответствие Object2 (Object1 хранит идентификатор Object2 в базе данных).

Каков наилучший способ объединения объектов? Я нашел MediatorLiveData и MutableLiveData , но не смог найти пример, который показался мне полезным.

Правки: О ситуации в целом: Object1 - это некоторые данные, которые я загружаю из Интернета и кэширую через Android Room. Object2 - это некоторые дополнительные данные, которые пользователи могут сохранять локально, всегда относящиеся к данным из одного указания c Object1. Таким образом, каждый Object2 относится к Object1, но не каждый Object1 имеет Object2. Наконец, я хочу передать объект в пользовательский интерфейс, содержащий все данные из Интернета и (если таковые имеются) все дополнительные данные, добавленные пользователями.

Проблема: я не знаю, что такое Наиболее эффективный способ сопоставления данных из двух разных источников данных таким образом, что LiveData всегда обновляется при изменении одного из них.

Спасибо за помощь во время обучения Android

1 Ответ

1 голос
/ 18 марта 2020

если вы пытаетесь получить объект1 и из объекта1 вы получите данные объекта2 и затем хотите передать наблюдателям, вам следует использовать MediatorLiveData.

 private MediatorLiveData<Object1> object2 = new MediatorLiveData<>();

  object2.addSource(sourceObject1, object1 -> {
           // retrieve object2 from id inside object1
        });
...