【问题标题】:how to write nested network request use rxjava + retrofit2如何使用 rxjava + retrofit2 编写嵌套网络请求
【发布时间】:2016-03-29 02:47:50
【问题描述】:

我在我的项目中使用的是 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 来实现这一点以及使用什么运算符?

【问题讨论】:

标签: android rx-java retrofit2


【解决方案1】:

有了 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(...);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-19
    • 2017-03-13
    • 2017-07-15
    • 1970-01-01
    • 1970-01-01
    • 2018-05-30
    • 1970-01-01
    • 2019-11-19
    相关资源
    最近更新 更多