我在我的项目中使用了 Rxjava 和 Retrofit2.0,它看起来像这样:
Observable<List<A>> getAFromServer();
Observable<List<B>> getBFromServer(@Body A.a);
如果我不使用响应式方式,它会是这样的:
List<A> listA = getAFromServer();
foreach(A a: listA){
getBFromServer(a.a)
}
那么,我的问题是如何使用 Rxjava 来实现这个以及使用什么运算符?
最佳答案
有了 Rx,您终于可以不再考虑“嵌套”网络请求了。
如果你仔细想想,你从来没有真正想过“嵌套”网络请求,对吧?这只是代码最终的样子,因为您只有 AsyncTask
或其他回调可供您使用。
使用 Rx,您最终可以编写结构类似于您实际想要的代码,即链式网络请求:首先做一件事,然后 再做一次。
getAFromServer()
.flatMap(new Func1<List<A>, Observable<A>>() {
@Override
public Observable<A> call(List<A> list) {
// the first flatMap is just a trick to "flatten" the Observable
return Observable.from(list);
}
})
.flatMap(new Func1<A, Observable<B>>() {
@Override
public Observable<A> call(A someA) {
return getBFromServer(someA.a);
}
})
.subscribe(...);
关于android - 如何使用 rxjava + retrofit2 编写嵌套网络请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36274492/