java - 在 RxJava 中使用 else 语句

标签 java android rx-java reactive-programming rx-java2

下面的代码只是检查空控件,并在满足所有条件的情况下使 mView.handleUrl(data) 方法起作用。

if( intent != null && intent.getExtras() != null ){
        String data = null;
        if( ( data = intent.getExtras().getString( AdvImagePagerFragment.ARG_PANAROMIC_IMAGE_DATA ) ) != null ){
            mView.handleUrl( data );
        }
    }

当我将代码与 RxJava 一起使用时,我在下面编写代码。

 Single.just( intent )
                .filter( intent1 -> intent1 != null && intent1.getExtras() != null )
                .map( intent12 -> intent12.getExtras() )
                .filter( bundle -> bundle.getString( AdvImagePagerFragment.ARG_PANAROMIC_IMAGE_DATA  ) != null )
                .map( bundle -> bundle.getString( AdvImagePagerFragment.ARG_PANAROMIC_IMAGE_DATA ) )
                .subscribe( s -> mView.handleUrl( s ) );

我编写的两段代码的工作原理相同。然而,当我尝试向代码中添加新条件时,问题就开始了。例如,如果 Intent 为空,我可能想要进行一些新的操作。

示例代码;

if( intent != null && intent.getExtras() != null ){
        String data = null;
        if( ( data = intent.getExtras().getString( AdvImagePagerFragment.ARG_PANAROMIC_IMAGE_DATA ) ) != null ){
            mView.handleUrl( data );
        } else { // START Added a new condition
           mView.showError();
        }
    }

但是我无法使用 RxJava 过滤器方法编写此代码。一旦过滤器返回 false,操作就完成了。 RxJava中添加新条件的解决方案是什么。

最佳答案

作为该流的订阅者,您对两种情况感兴趣:数据是否为空以及数据是否不为空。这意味着您无法像之前那样过滤流。


    Single.just(sourceIntent)
            .map(intent -> {
                String data = "";
                Bundle bundle = intent.getExtras();
                if (bundle != null) {
                    data = bundle.getString(KEY, "");
                }
                return data;
            })
            .subscribe(data -> {
                if ("".equals(data)) view.showError();
                else view.handleUrl(data);
            });

关于java - 在 RxJava 中使用 else 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49003136/

相关文章:

java - 如何将jar文件包含到iphone应用程序中

java - 我应该在 gwt 中哪里放置应用程序级初始化代码?

java - 自己学习算法,如何在java中实现元组?

java - Metaio,在相机 View 中显示多个内容

java - 在 Android 中使用谷歌地图在自定义信息窗口上动画

java - 如何从订阅者返回 Observable?

java - 是什么意思啊! Kotlin RxJava Flowable 中的运算符?

java - Maven 项目中的 MapStruct 依赖范围

android - 我无法将我的项目与 gradle 同步?

java - 如何使用 RxJava 2 创建异步事件总线?