rxjava+;改型-如何等待并获得android中首次观察到的结果?
我最近开始学习改型和rxjava。我在寻找关于如何等待和获得第一次观测结果的想法。基本上,我想在一个简单的登录上应用它。第一个api调用是获取服务器时间。第二个api调用将等待第一个调用的结果(即服务器时间)并利用它rxjava+;改型-如何等待并获得android中首次观察到的结果?,android,rx-java,retrofit,retrofit2,Android,Rx Java,Retrofit,Retrofit2,我最近开始学习改型和rxjava。我在寻找关于如何等待和获得第一次观测结果的想法。基本上,我想在一个简单的登录上应用它。第一个api调用是获取服务器时间。第二个api调用将等待第一个调用的结果(即服务器时间)并利用它 Retrofit retrofit = RetrofitClient.getRetrofitClient(); LocalServerInterface apiInterface = retrofit.create(L
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个数据,我是说第一个和第二个可观测数据,可以吗?然后您可以同时使用对象或集合。