使用 RxJava 调用四个 api 组合在一起
Calling four api's combining together using RxJava
我是 RxJava 新手
Restapi.class
/************/
@GET("app/dashboard")
Observable<CategoryHomeModel[]> getCategories(@HeaderMap Map<String, String> headers);
@GET("app/wallet/balance")
Observable<WalletBalance> getWalletBalance(@HeaderMap Map<String, String> headers);
@GET("/app/swap/myrateswaps")
Observable<SwapSettings> rateMySwap(@HeaderMap Map<String, String> headers);
@GET("/app/getsettings")
Observable<Settings> getSettings(@HeaderMap Map<String, String> headers);
/************/
我有四个可观察值
Observable<CategoryHomeModel[]> categoriesObservable = retrofit
.create(Restapi.class)
.getCategories(prepareHeaders())
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread());
Observable<WalletBalance> walletObservable = retrofit
.create(Restapi.class)
.getWalletBalance(prepareHeaders())
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread());
Observable<Settings> settingsObservable = retrofit
.create(Restapi.class)
.getSettings(prepareHeaders())
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread());
Observable<SwapSettings> ratingsObservable = retrofit
.create(Restapi.class)
.rateMySwap(prepareHeaders())
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread());
如何将所有四个 observables 合并为一个并在一个地方获得响应并一起处理所有 observables 的所有响应
我发现这可以通过 Merge 完成,如果可以,如何使用合并?
使用这种方式
List<Observable<?>> observables = Lists.newArrayList(categoriesObservable, walletObservable, settingsObservable, ratingsObservable);
Observable.merge(observables).toList().subscribe(new Action1<List<Object>>() {
@Override
public void call(List<Object> objects) {
// success
}
}, new Action1<Throwable>() {
@Override
public void call(Throwable throwable) {
// error
}
});
或者您可以使用 mergeDelayError
代替
希望这对您有所帮助
您可以使用 Zip 运算符
Observable<String> result =
Observable.zip(categoriesObservable, walletObservable, settingsObservable, ratingsObservable, new Function4<CategoryHomeModel, WalletBalance, Settings, SwapSettings, String>() {
@Override
public String apply(CategoryHomeModel category, WalletBalance wallet, Settings settings, SwapSettings swap) {
String res = category.name + wallet.name + settings.name + swap.name;
// You can customize the final result based upon your requirements
return res;
}
});
我是 RxJava 新手
Restapi.class
/************/
@GET("app/dashboard")
Observable<CategoryHomeModel[]> getCategories(@HeaderMap Map<String, String> headers);
@GET("app/wallet/balance")
Observable<WalletBalance> getWalletBalance(@HeaderMap Map<String, String> headers);
@GET("/app/swap/myrateswaps")
Observable<SwapSettings> rateMySwap(@HeaderMap Map<String, String> headers);
@GET("/app/getsettings")
Observable<Settings> getSettings(@HeaderMap Map<String, String> headers);
/************/
我有四个可观察值
Observable<CategoryHomeModel[]> categoriesObservable = retrofit
.create(Restapi.class)
.getCategories(prepareHeaders())
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread());
Observable<WalletBalance> walletObservable = retrofit
.create(Restapi.class)
.getWalletBalance(prepareHeaders())
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread());
Observable<Settings> settingsObservable = retrofit
.create(Restapi.class)
.getSettings(prepareHeaders())
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread());
Observable<SwapSettings> ratingsObservable = retrofit
.create(Restapi.class)
.rateMySwap(prepareHeaders())
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread());
如何将所有四个 observables 合并为一个并在一个地方获得响应并一起处理所有 observables 的所有响应
我发现这可以通过 Merge 完成,如果可以,如何使用合并?
使用这种方式
List<Observable<?>> observables = Lists.newArrayList(categoriesObservable, walletObservable, settingsObservable, ratingsObservable);
Observable.merge(observables).toList().subscribe(new Action1<List<Object>>() {
@Override
public void call(List<Object> objects) {
// success
}
}, new Action1<Throwable>() {
@Override
public void call(Throwable throwable) {
// error
}
});
或者您可以使用 mergeDelayError
代替
希望这对您有所帮助
您可以使用 Zip 运算符
Observable<String> result =
Observable.zip(categoriesObservable, walletObservable, settingsObservable, ratingsObservable, new Function4<CategoryHomeModel, WalletBalance, Settings, SwapSettings, String>() {
@Override
public String apply(CategoryHomeModel category, WalletBalance wallet, Settings settings, SwapSettings swap) {
String res = category.name + wallet.name + settings.name + swap.name;
// You can customize the final result based upon your requirements
return res;
}
});