I am using RxAndroid + Retrofit and what I want to do is to combine 2 actions in one. For example I have two methods. First one return some URL in onNext block.
apiRequests.getApi().getURL()
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<CreateUserResponse>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(CreateUserResponse createUserResponse) {
secondMethos(createUserResponse.getURL()); // HERE GOES THE URL
}
});
The second method user this URL to do something else
public void secondMethod(URL){
Observable.create(new Observable.OnSubscribe<Object>() {
@Override
public void call(Subscriber<? super Object> subscriber) {
}
});
Observable.create(new Observable.OnSubscribe<List<Arg>>() {
@Override
public void call(Subscriber<? super List<Arg>> subscriber) {
subscriber.onNext(test(URL));
subscriber.onCompleted();
}
}).subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<List<Arg>>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(List<Arg> params) {
}
});
}
Is it possible to combine these methods into one? Thanks
You can simply map the values as such
apiRequests.getApi().getURL()
.map(new Func1<CreateUserResponse, List<Arg>>() {
public List<Arg> call(CreateUserResponse response) {
return test(response.getURL());
}
})
.subscribeOn(Schedulers.newThread())
.observerOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<List<Arg>>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(List<Arg> params) {
}
Note if you want onNext called with each Arg
instead of List<Arg>
you can use flatMapInterable as below.
apiRequests.getApi().getURL()
.flatMapIterable(new Func1<CreateUserResponse, List<Arg>>() {
public List<Arg> call(CreateUserResponse response) {
return test(response.getURL());
}
})
.subscribeOn(Schedulers.newThread())
.observerOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<Arg>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(Arg params) {
}
});
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.