我是RXJava/RXAndroid上的新手。我想要實現這種情況:根據RXJava中的某些條件選擇不同的方式。 例如,我首先從網絡獲取用戶信息,如果這是一個VIP用戶,我將繼續從網絡獲取更多信息,或者只是在主線程中顯示一些信息(打破鏈條)。這裏的流程圖:https://i.stack.imgur.com/0hztR.png如何在RX java鏈中使用「if-else」?
我對此做了一些搜索,只找到「switchIfEmpty」可能會有所幫助。 我寫了下面的代碼:
getUserFromNetwork("userId")
.flatMap(new Function<User, ObservableSource<User>>() {
@Override
public ObservableSource<User> apply(User user) throws Exception {
if(!user.isVip){
//show user info on MainThread!
return Observable.empty();
}else{
return getVipUserFromNetwork("userId");
}
}
}).switchIfEmpty(new ObservableSource<User>() {
@Override
public void subscribe(Observer<? super User> observer) {
//show user info in main thread
//just break the chain for normal user
observer.onComplete();
}
}).doOnNext(new Consumer<User>() {
@Override
public void accept(User user) throws Exception {
//show vip user info in main thread
}
}).subscribe();
有沒有更簡單的方式來實現這一目標?
謝謝!
這就是你可以做的最好的。你的代碼沒有問題。 –