gpt4 book ai didi

android - rxjava + retrofit - 如何等待并获得 android 中第一个可观察到的结果?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:55:59 25 4
gpt4 key购买 nike

我最近开始学习改造和 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());

现在,我被困在这里。在第二个 observable 上,特别是在 getNetworks 方法上,我想使用从第一个 observable 中得到的东西。有什么想法吗?

编辑:

我想先处理调用 1 的结果,然后再将其提供给 API 调用 2。这可能吗?

最佳答案

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

LocalServerInterface apiInterface = retrofit.create(LocalServerInterface.class)

要使第二个 Observable 从第一个 Observable 的结果开始,您需要执行 flatMap

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

参见 flatMap documentation了解更多信息。

重要提示。在这种情况下,当第一个可观察对象仅发出一个响应时,使用 flatMapconcatMap 没有区别。对于其他情况,请考虑 the difference between flatMap and concatMap .

关于android - rxjava + retrofit - 如何等待并获得 android 中第一个可观察到的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52374835/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com