[英]RxAndroid chain actions
我正在使用RxAndroid + Retrofit,我想做的是將2個動作合而為一。 例如,我有兩種方法。 第一個在onNext塊中返回一些URL。
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
}
});
第二種方法用戶使用此URL做其他事情
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) {
}
});
}
是否可以將這些方法合而為一? 謝謝
您可以這樣簡單地映射值
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) {
}
注意,如果要用每個Arg
而不是List<Arg>
調用onNext,則可以如下使用flatMapInterable。
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) {
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.