繁体   English   中英

rxjava + retrofit - 如何在android中等待并获得第一个observable的结果?

[英]rxjava + retrofit - How to wait and get the result of first observable in android?

我最近开始学习改造和rxjava。 我正在寻找关于如何等待获得第一个可观察结果的任何想法。 基本上,我想在简单的登录上应用它。 第一个api调用是获取服务器时间。 第二个api调用将等待第一个调用的结果(即服务器时间)并使用它。

                Retrofit retrofit = RetrofitClient.getRetrofitClient();
                LocalServerInterface apiInterface = retrofit.create(LocalServerInterface .class);

                Observable<ServerTime> timeObservable = retrofit
                        .create(LocalServerInterface .class)
                        .getTime()
                        .subscribeOn(Schedulers.newThread())
                        .observeOn(AndroidSchedulers.mainThread());

                Observable<ServerNetwork> serverNetworkObservable = retrofit
                        .create(LocalServerInterface .class)
                        .getNetworks(//valuefromapicall1, anothervalue)
                        .subscribeOn(Schedulers.newThread())
                        .observeOn(AndroidSchedulers.mainThread());

现在,我被困在这里。 在第二个可观察的,特别是在getNetworks方法上,我想使用我从第一个可观察到的东西。 有任何想法吗?

编辑:

在将其提供给api调用之前,我想首先处理调用1的结果。是否可能?

首先,不要每次都重新创建LocalServerInterface ,创建一个LocalServerInterface用它。 创建接口实例是一项昂贵的操作。

LocalServerInterface apiInterface = retrofit.create(LocalServerInterface.class)

要使第一个observable的第二个可观察的开始,你需要做flatMap

Observable<ServerNetwork> serverNetworkObservable = apiInterface
                        .getTime()
                        .flatMap(time -> apiInterface.getNetworks(time, anothervalue))
                        .subscribeOn(Schedulers.newThread())
                        .observeOn(AndroidSchedulers.mainThread());

有关详细信息,请参阅flatMap文档

重要说明 在这种情况下,当第一个observable只发出一个响应时,使用flatMapconcatMap没有区别。 对于其他情况,请考虑flatMapconcatMap之间的区别

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM