Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
rxjava+;改型-如何等待并获得android中首次观察到的结果?_Android_Rx Java_Retrofit_Retrofit2 - Fatal编程技术网

rxjava+;改型-如何等待并获得android中首次观察到的结果?

rxjava+;改型-如何等待并获得android中首次观察到的结果?,android,rx-java,retrofit,retrofit2,Android,Rx Java,Retrofit,Retrofit2,我最近开始学习改型和rxjava。我在寻找关于如何等待和获得第一次观测结果的想法。基本上,我想在一个简单的登录上应用它。第一个api调用是获取服务器时间。第二个api调用将等待第一个调用的结果(即服务器时间)并利用它 Retrofit retrofit = RetrofitClient.getRetrofitClient(); LocalServerInterface apiInterface = retrofit.create(L

我最近开始学习改型和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());
Refundation-Refundation=RefundationClient.getRefundationClient();
LocalServerInterface apiInterface=reformation.create(LocalServerInterface.class);
可观测时间可观测=改装
.create(LocalServerInterface.class)
.getTime()
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread());
可观察服务器网络可观察=改装
.create(LocalServerInterface.class)
.getNetworks(//valuefromapicall1,另一个值)
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread());
现在,我被困在这里了。在第二个可观察的方面,特别是在getNetworks方法上,我想使用我从第一个可观察到的东西。有什么想法吗

编辑:


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

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

LocalServerInterface apiInterface = retrofit.create(LocalServerInterface.class)
要使第二个可观察的对象从第一个可观察对象的结果开始,您需要执行
flatMap

Observable<ServerNetwork> serverNetworkObservable = apiInterface
                        .getTime()
                        .flatMap(time -> apiInterface.getNetworks(time, anothervalue))
                        .subscribeOn(Schedulers.newThread())
                        .observeOn(AndroidSchedulers.mainThread());
Observable服务器networkobservable=api接口
.getTime()
.flatMap(时间->apinterface.getNetworks(时间,另一个值))
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread());
有关更多信息,请参阅


重要提示。在这种情况下,当第一个可观察对象只发出一个响应时,使用
flatMap
concatMap
之间没有区别。对于其他情况,考虑。

谢谢小费。你给出的例子把时间直接映射到了第二个可观测值,对吗?如果我想先处理时间,然后用它来处理第二个可观察的对象呢?我得到的lambda表达式在语言1.7中不受支持。在getTime之后使用map操作符来转换时间。Observable serverNetworkObservable=apiInterface.getTime().map(…).flatMap(时间->apiInterface.getNetworks(时间,另一个值))我认为使用
flatMap可以解决您的问题。你试过itOk吗?让我换一种方式说,如果你能同时带来2个数据,我是说第一个和第二个可观测数据,可以吗?然后您可以同时使用对象或集合。