sil*_*r14 4 android rx-java retrofit retrofit2
我最近开始学习改造和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());
Run Code Online (Sandbox Code Playgroud)
现在,我被困在这里.在第二个可观察的,特别是在getNetworks方法上,我想使用我从第一个可观察到的东西.有任何想法吗?
编辑:
在将其提供给api调用之前,我想首先处理调用1的结果.是否可能?
首先,不要LocalServerInterface每次都重新创建,创建一个并重用它.创建接口实例是一项昂贵的操作.
LocalServerInterface apiInterface = retrofit.create(LocalServerInterface.class)
Run Code Online (Sandbox Code Playgroud)
并且要使第一个可观察的结果以第一个可观察的结果开始,你需要这样做flatMap.
Observable<ServerNetwork> serverNetworkObservable = apiInterface
.getTime()
.flatMap(time -> apiInterface.getNetworks(time, anothervalue))
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread());
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅flatMap文档.
重要说明.在这种情况下,当第一个observable只发出一个响应时,使用flatMap和之间没有区别concatMap.对于其他情况,考虑之间的差异flatMap和concatMap.
| 归档时间: |
|
| 查看次数: |
473 次 |
| 最近记录: |