您可以使用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());
}
}
這可以應用到任何東西,它不是在所有
volely具體
反正有,我可以使用這個連續的異步調用LiveData改造 –