我希望看到一个Android java示例,说明如何对一系列异步(=非阻塞)RESTful Volley请求进行排序。
这是RxAndroid的用途吗?
我试过这样做但最终进入了CBHell: Need to send multiple Volley Requests - in a sequence
我希望第一次请求的结果能够用于第二次请求。然后我要在第3个请求中使用第二个请求的结果。请问,我如何将这些排球请求联系起来?
答案 0 :(得分:3)
您可以使用Rx通过flatMap
方法链接多个请求。
flatMap
要求您返回选择类型的另一个Observable
,从而允许您使用其他类型执行异步操作。
以下所有示例都是使用新的rx v2制作的。但所有方法和机制也适用于v1
示例:
final MyVolleyApi api = new MyVolleyApi();
api.getName()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.flatMap(new Function<String, ObservableSource<Integer>>() {
@Override
public ObservableSource<Integer> apply(String name) throws Exception {
return api.getAgeForName(name);
}
})
.flatMap(new Function<Integer, ObservableSource<Date>>() {
@Override
public ObservableSource<Date> apply(Integer age) throws Exception {
return api.getYearOfBirthForAge(age);
}
})
.doOnError(new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
// handle the exception that occurred during one of the api calls
}
})
.subscribe(new Consumer<Date>() {
@Override
public void accept(Date date) throws Exception {
// do something with the 3rd argument here
}
});
这是MyVolleyApi
虚拟类:
public class MyVolleyApi {
public Observable<String> getName() {
return Observable.just("Rx");
}
public Observable<Integer> getAgeForName(String name) {
return Observable.just(24);
}
public Observable<Date> getYearOfBirthForAge(int age) {
return Observable.just(new Date());
}
}
这可能适用于任何事情,它根本不是特定的