android - 如何使用 rxjava + retrofit2 编写嵌套网络请求

标签 android rx-java retrofit2

我在我的项目中使用了 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/

相关文章:

android - 混合应用程序 HTML

android - Retrofit2 和 Kotlin

android - 启用 ProGuard 时改造 2 不发送数据

java - 在 spring 中进行改造调用时,当状态码不为 200 时,响应正文为 null

android - Eclipse - keystore 被篡改,或密码不正确。但是昨天成功了

php - 如何将图像从安卓相机上传到网络服务器(不在应用程序中)

android - 动态添加布局到 ScrollView android

java - RxAndroid 和 Retrofit : Unable to create call adapter for io. reactivex.Observable<retrofit2.Response<okhttp3.ResponseBody>>

android - 如何实现对可运行线程的简单 RxJava 调用?

android - 对服务的 react 。谷歌 REST 架构,RxJava