J'utilise Rx-Java pour effectuer un appel api pour chaque élément d'un tableau. Je souhaite que l'action OnComplete soit appelée une fois que toutes les opérations sont terminées mais que l'appel n'est pas effectué. Les opérations sur les éléments de tableau se terminent correctement.En utilisant Observable.from et flatMap pour effectuer une opération sur chaque élément d'un tableau, onComplete n'est pas appelé
public Observable<User> report(Long[] userIds) {
return Observable.from(userIds).flatMap(new Func1<Long, Observable<User>>() {
@Override
public Observable<User> call(Long id) {
return reportSpam(id);
}
});
}
public Observable<User> report(final Long id) {
return Observable.create(new Observable.OnSubscribe<User>() {
@Override
public void call(Subscriber<? super User> subscriber) {
try {
twitter.report(id);
} catch (TwitterException e) {
subscriber.onError(e);
}
}
});
}
final Long[] usersIds = selectedToUsersIds();
report(usersIds).subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread()).subscribe(new Action1<User>() {
@Override
public void call(User user) {
//nothing to do here, don't even need the User
}
}, new Action1<Throwable>() {
@Override
public void call(Throwable throwable) {
//handle this
}
}, new Action0() {
@Override
public void call() {
Toast.makeText(getActivity(), getString(R.string.reported_for_spam, usersIds.length), Toast.LENGTH_SHORT).show();
}
});