В настоящее время я пытаюсь попасть в службу и вернуть список объектов, прежде чем он будет возвращен подписчику. Я хочу сделать еще один синхронный вызов для каждого объекта в списке, чтобы сделать другой вызов службы для установки отсутствующего поля , Я успешно выполняю все вызовы, но объект, возвращенный в подписчике, имеет это поле, которое мне нужно установить равным null. Вот пример моего кода:Как перехватить наблюдаемый объект и изменить его в RxJava, прежде чем вернуться к подписчику?
Пример услуг:
rx.Observable<List<ExampleObject>> getExampleObject();
rx.Observable<MissingObject> getMissingObjectByFoo(@Path("foo") String foo);
Пример Класс:
public class ExampleObject {
String foo;
MissingObject bar;
public String getFoo() {
return this.foo;
}
public void setFoo(String value) {
this.foo = value;
}
public MissingObject getBar() {
return this.bar;
}
public void setBar(MissingObject value) {
this.bar = value;
}
}
Пример реализации:
mService.getExampleObject().flatMap(new Func1<List<ExampleObject>, Observable<?>>() {
@Override
public Observable<List<ExampleObject>> call(List<ExampleObject> exampleObjects) {
for (ExampleObject entry : exampleObjects) {
String foo = entry.getFoo();
mService.getMissingObjectByFoo(foo)
.subscribeOn(mScheduler.backgroundThread())
.observeOn(mScheduler.mainThread())
.subscribe(new Subscriber<MissingObject>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(MissingObject missingObject) {
entry.setBar(missingObject);
}
});
}
return Observable.just(exampleObjects);
};
Вы не можете использовать 'flatMap'? – njzk2
Я использую flatmap, но List, возвращаемый подписчику, имеет значение null для всего поля MissingObject –
Вы можете использовать Retrolabda при использовании RxJava, чтобы сделать код чистым. – aleksandrbel