【问题标题】:Observe data change from multiple table, using Room使用 Room 观察多个表中的数据变化
【发布时间】:2020-03-31 04:45:07
【问题描述】:

我有名为 Data 的自定义类的 MutableLiveData

private val mutableLiveData = MutableLiveData<Data>()

我有两个名为 A 和 B 的表,首先我从表 A 中获取数据,然后从 B 中获取数据。我做了一些业务逻辑,然后将其添加到 mutableLiveData 中,如下所示,

var obA = repository.getA()

var obB = repository.getB()

if (obA != null && obB != null) {
     mutableLiveData.postValue(Data(obA, obB))
}

现在我在我的一个片段中观察到这个 mutableLiveData, 我希望 TableA 或 TableB 中的任何更改都应该更新 mutableLiveData,它当前没有更新。不知道有没有可能?如果可能的话,任何人都可以建议我,那么我该如何做到这一点,在此先感谢。

【问题讨论】:

    标签: android android-room android-livedata android-viewmodel


    【解决方案1】:

    是的,这是可能的,这是基于您发布的内容的 java 代码。您可以研究 google 的基本示例以获得更多见解。 https://github.com/android/architecture-components-samples/tree/main/BasicSample

        MediatorLiveData<Data> mObservableAB = new MediatorLiveData<>();
    
        ObA obA = new ObA();
    
    
        ObB obB = new ObB();
    
        mObservableA.addSource(repository.getA(), new Observer<ObA>() {
            @Override
            public void onChanged(ObA obAx) {
    
                 if(obAx != null)
    
                     obA = obAx;
    
                    mObservableAB.postValue(new Data(obA, obB));
    
            }
        });
    
        mObservableB.addSource(repository.getB(), new Observer<ObB>() {
            @Override
            public void onChanged(ObB obBx) {
    
                if(obBx != null)
    
                    obB=obBx;
    
                    mObservableAB.postValue(new Data(obA, obB));
    
            }
        });
    
        
    }
    
    public LiveData<Data> getObservableAB(){
    
        return mObservableAB;   
    
    }
    

    【讨论】:

      猜你喜欢
      • 2019-03-01
      • 1970-01-01
      • 2012-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多