Sta*_*ool 5 java android retrofit rx-java2
我对互联网、数据库进行了一系列调用,结果我向用户显示收集到的信息。现在我有非常难看的三层嵌套 RxJava 流。我真的想让它变得流畅且易于阅读,但我真的很难坚持下去。
我已经阅读了有关 Map、flatMap、zip 等的所有内容。不能让这些东西一起工作。
代码:进行api调用。接收到的信息放入数据库中,在第一个流的 onSuccess 方法中订阅另一个流,并在第二个流的 onSuccess 方法中从数据库接收到的信息最终显示给用户。
达特·弗兰肯斯坦:
disposables.add(modelManager.apiCall()
.subscribeOn(Schedulers.io())
.observeOn(mainThread)
.subscribeWith(new DisposableSingleObserver {
public void onSuccess(ApiResponse apiResponse) {
modelManager.storeInDatabase(apiResponse)
//level 1 nested stream:
disposables.add(modelManager.loadFromDatabas()
.subscribeOn(Schedulers.io())
.observeOn(mainThread)
.subscribeWith(new DisposableSingleObserver{
public void onSuccess(Data data) {
view.showData(data);
}
public void onError(Throwable e) {
}
}));
}
@Override
public void onError(Throwable e) {
}
}));
}
Run Code Online (Sandbox Code Playgroud)
我已经阅读了有关 Map、flatMap、zip 等的所有内容。不能让这些东西一起工作。
好吧,你错过了一些关于 的事情flatMap
,因为这就是它的用途;)
disposables.add(
modelManager.apiCall()
.subscribeOn(Schedulers.io())
.doOnSuccess((apiResponse) -> {
modelManager.storeInDatabase(apiResponse)
})
.flatMap((apiResponse) -> {
modelManager.loadFromDatabase()
})
.observeOn(AndroidSchedulers.mainThread())
.subscribe((data) -> {
view.showData(data);
})
);
Run Code Online (Sandbox Code Playgroud)
但如果您使用像 RoomLiveData<List<T>>
支持这样的反应式数据库层,那么您实际上可以放弃该modelManager.loadFromDatabase()
部分。
归档时间: |
|
查看次数: |
1082 次 |
最近记录: |