在视图模型中使用mediatorlivedata对事件进行排序时,如何避免回调地狱

时间:2019-05-19 06:13:51

标签: android android-livedata

我正在使用Google提供的架构最佳做法编写一个android应用。我已使用该活动对内部调用存储库的viewmodel进行了调用。在其中一个业务流程中,我需要执行以下一系列步骤:

1)从返回liveData的SQLite移动数据库中的table1中获取数据。

2)基于SQLite数据库中table1中存在的字段,我需要对网络进行API调用以获取一些值。

3)从网络获得结果后,我需要更新table2和table3。

现在,由于需要对调用进行排序,因此我正在使用MediatorLiveData在onChange中添加源。但是,为了对调用进行排序,我需要继续在onchanged方法内编写代码,这会导致回调地狱问题。

由于我是Android开发的新手,有人可以指导我以正确的方式解决Android中的此调用嵌套问题。为此,我需要使用RxJava2吗?作为Android体系结构的指导原则,仅告诉我们有关LiveData的问题,想知道是否可以使用LiveData来提供一种更清洁的方法。

//从SQLite获取数据

LiveData liveData1 = repository.getTable1Record();

liveDataMerger.addSource(liveData1,新的Observer(){

  @Override public void onChanged(@Nullable Table1Row row) {
      liveDataMerger.removeSource(liveData1);
      // Fetch data from network
      LiveData liveData2 = repository.getRecordFromServerOverNetwork();
      liveDataMerger.addSource(liveData2, new Observer() {
           @Override public void onChanged(@Nullable Table1Row row) {
               liveDataMerger.removeSource(liveData2);
               // Fetch data from database again from another table
               LiveData liveData3 = repository.getTable2Record();
               liveDataMerger.addSource(liveData3, new Observer() {
                @Override public void onChanged(@Nullable Table2Row row) {
                  liveDataMerger.setValue(row.MyValue);
               }
              }
           }
      }
  }

});

0 个答案:

没有答案