Android 在viewmodel中使用mediatorlivedata对事件排序时如何避免回调地狱
我正在使用谷歌提供的架构最佳实践编写一个android应用程序。我使用了调用viewmodel的活动,该活动在内部调用存储库。在其中一个业务流程中,我需要执行以下一系列步骤: 1) 从返回liveData的SQLite mobile数据库中的表1中获取数据 2) 基于SQLite数据库中表1中的字段,我需要对网络进行API调用以获取一些值 3) 一旦我从网络中得到结果,我需要更新表2和表3 现在,由于需要对调用进行排序,我正在使用MediatorLiveData添加源和onChange。但是,为了对调用进行排序,我需要继续在onchanged方法中编写代码,这会导致回调地狱问题 由于我是Android开发的新手,有人能指导我如何正确地解决Android中的调用嵌套问题吗。我需要用RxJava2吗?作为android架构指南,只告诉我们LiveData,我想知道是否有更干净的方法可以使用LiveData //从SQLite获取数据 LiveData liveData1=repository.getTable1Record() addSource(liveData1,newobserver()){Android 在viewmodel中使用mediatorlivedata对事件排序时如何避免回调地狱,android,android-livedata,Android,Android Livedata,我正在使用谷歌提供的架构最佳实践编写一个android应用程序。我使用了调用viewmodel的活动,该活动在内部调用存储库。在其中一个业务流程中,我需要执行以下一系列步骤: 1) 从返回liveData的SQLite mobile数据库中的表1中获取数据 2) 基于SQLite数据库中表1中的字段,我需要对网络进行API调用以获取一些值 3) 一旦我从网络中得到结果,我需要更新表2和表3 现在,由于需要对调用进行排序,我正在使用MediatorLiveData添加源和onChange。但是,为
})) 我认为
LiveData
不适合这种情况,因为每个请求都会执行一次任务。如果不使用LiveData
,您可以更轻松地完成所要做的事情。如果您必须使用LiveData
,那么有一些有用的库允许您使用类似RxJava的运算符,例如。感谢Sanlok提供的见解。我使用LiveData作为启动此流的活动,依赖于此流的响应,并根据响应更新UI。为了避免活动中的任何内存泄漏被破坏,我更喜欢LiveData。关于您提供的API,能否提供一个如何链接请求的示例。我发现在RxJava中,我们可以使用flatMap函数来链接请求,所以这里有没有任何等效的函数可以帮助我。谢谢
@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);
}
}
}
}
}