zzq*_*zzq 2 android rx-java retrofit2
我在我的项目中使用Rxjava和Retrofit2.0,它看起来像这样:
Observable<List<A>> getAFromServer();
Observable<List<B>> getBFromServer(@Body A.a);
Run Code Online (Sandbox Code Playgroud)
如果我不使用反应方式,它将是这样的:
List<A> listA = getAFromServer();
foreach(A a: listA){
getBFromServer(a.a)
}
Run Code Online (Sandbox Code Playgroud)
所以,我的问题是如何使用Rxjava来实现这个以及使用什么运算符?
使用Rx,您最终可以不再考虑"嵌套"网络请求.
如果你考虑一下,你真的不想"嵌套"网络请求,对吧?这只是代码最终看起来的样子,因为你只有AsyncTasks或其他回调可供你使用.
使用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(...);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
602 次 |
| 最近记录: |