小编niu*_* yi的帖子

如何在RX java链中使用"if-else"?

我是RXJava/RXAndroid的新手.我想实现这个案例:根据RXJava中的某些条件选择不同的方式.例如,首先,我从网络获取用户信息,如果这是VIP用户,我将继续从网络获取更多信息或只在主线程中显示一些信息(打破链.)这里的流程图:https: //i.stack.imgur.com/0hztR.png

我做了一些搜索,只发现"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();
Run Code Online (Sandbox Code Playgroud)

有更简单的方法来实现这一目标吗?

谢谢!

java android rx-java rx-android rx-java2

12
推荐指数
2
解决办法
1万
查看次数

标签 统计

android ×1

java ×1

rx-android ×1

rx-java ×1

rx-java2 ×1