【发布时间】:2017-08-08 10:48:23
【问题描述】:
我正在使用 Retrofit 和 RxAndroid。现在我想调用 api 来获取用户信息,然后使用这个信息作为参数来调用另一个 api 来获取更多信息。 我应该怎么做才能达到这个目的?
P/S:可以用回调来做,但我想用RX-Android风格做
【问题讨论】:
标签: android reactive-programming rx-android
我正在使用 Retrofit 和 RxAndroid。现在我想调用 api 来获取用户信息,然后使用这个信息作为参数来调用另一个 api 来获取更多信息。 我应该怎么做才能达到这个目的?
P/S:可以用回调来做,但我想用RX-Android风格做
【问题讨论】:
标签: android reactive-programming rx-android
您可以为此使用flatMap。
伪代码:
apiService.getUser()
.flatMap(user -> apiService.getUserMessages(user.getId()))
.subscribe(messages -> {
}, error -> {
});
【讨论】:
你可以这样做:
Observable<User> userObservable = api.getUserInformation();
userObservable.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<User>() {
@Override
public void accept(User user) throws Exception {
//do what you want this the user
}
});
以下代码将在新线程中执行操作,并在主线程上调用回调。
【讨论】:
如果你想要递归,你应该使用concatMap()。此方法将确保您以指定的顺序进行多次调用。 flatMap() 更随机。
您可以查看有关此link 的更多信息。
【讨论】: