[英]Multiple API calls using RxJava and Android
我有一个对象列表,这些对象应该按顺序传递给 API,并需要在所有调用完成后进行最终回调。 代码结构看起来像
//Singleton class
public class RestAPIManager {
public Completable doSomething(A a) {
//Make API call here and return Completeable
}
}
//Class from which the above API call is made
public class FragmentA extends Fragment {
List<A> aList = new ArrayList<A>;
//This method should return completable after all calls are made
private Completable callDoSomething(List<A> data) {
// The code that I tried
Observable.just(data)
.flatMap(new <List<A>, Observable<?>>() {
@Override
public Observable<?> call(List<A> dataList) {
//WHAT SHOULD BE RETURNED FROM HERE
for (A a : dataList) {
RestAPIManager.getInstance().doSomething(a)
}
}
})
.doOnCompleted(new Action0() {
@Override
public void call() {
}
})
.doOnError(new Action1<Throwable>() {
@Override
public void call(Throwable throwable) {
}
})
.toCompletable();
}
}
我刚刚开始使用 RxJava,所以我真的不确定如何继续。
您可以使用from
运算符来展平列表,然后使用concatMap
依次处理每个项目:
Observable.from(data)
.concatMap(new Func1<A, Observable<?>>() {
@Override
public Observable<?> call(A a) {
return RestAPIManager.getInstance().doSomething(a);
}
})
.toCompletable();
对于 android 使用这样的东西
public void doIt(List<String> data) {
final Subscription subscription = proceed(data)
.subscribe(new Subscriber<List<String>>() {
@Override
public void onCompleted() {
//final callback here
System.out.println("on completed");
}
@Override
public void onError(Throwable e) {
//invokes on error
System.out.println("on error");
}
@Override
public void onNext(List<String> strings) {
//invokes on items emits
strings.forEach(System.out::print);
}
});
}
private Observable<List<String>> proceed(List<String> data) {
return Observable.from(data)
.map(RestApiManager.getInstance()::doSomething)
.toList();
}
并通过 subscription.unsubscribe() 取消订阅请求执行; 当 onStop() 调用以避免泄漏时。 并且不要忘记调度程序
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.