gpt4 book ai didi

android - 回调 hell : Sequencing RESTful Volley requests? RxAndroid?

转载 作者:搜寻专家 更新时间:2023-11-01 08:32:29 24 4
gpt4 key购买 nike

我想看一个 Android java 示例,了解如何对异步(= 非阻塞)RESTful Volley 请求链进行排序。

这就是 RxAndroid 的用途吗?

  • 如果是这样,我希望看到使用 RxAndroid 的示例。
  • 如果没有,我仍然希望看到一个很好的例子,而不是深入了解 CALLBACK HELL!

我尝试这样做但最终陷入了 CBHell: Need to send multiple Volley Requests - in a sequence

我希望在第二次请求中使用第一次请求的结果。然后我想在第三个请求中使用第二个请求的结果。请问,我如何链接此类 Volley 请求?

最佳答案

您可以使用 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());
}
}

这可以适用于任何事物,一点也不具体

关于android - 回调 hell : Sequencing RESTful Volley requests? RxAndroid?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39521956/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com