Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在RxJava中使用else语句_Java_Android_Rx Java_Reactive Programming_Rx Java2 - Fatal编程技术网

在RxJava中使用else语句

在RxJava中使用else语句,java,android,rx-java,reactive-programming,rx-java2,Java,Android,Rx Java,Reactive Programming,Rx Java2,下面的代码只是检查null控件,如果提供了所有条件,则使mView.handleUrl(data)方法工作 if( intent != null && intent.getExtras() != null ){ String data = null; if( ( data = intent.getExtras().getString( AdvImagePagerFragment.ARG_PANAROMIC_IMAGE_DATA ) ) != nul

下面的代码只是检查null控件,如果提供了所有条件,则使
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为null,我可以创建一些新的操作符

示例代码

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( intent )
            .filter( intent1 -> intent1 != null && intent1.getExtras() != null )
            .map( intent12 -> intent12.getExtras() )
            .map( bundle -> bundle.getString( AdvImagePagerFragment.ARG_PANAROMIC_IMAGE_DATA ) )
            .map(string -> string == null ? "show_error" : string)
            .subscribe(new DisposableMaybeObserver<String>() {
                @Override
                public void onSuccess(String s) {

                }

                @Override
                public void onError(Throwable e) {

                }

                @Override
                public void onComplete() {

                }
            })
希望这有帮助。

试试这个:-

Single.just( intent )
            .filter( intent1 -> intent1 != null && intent1.getExtras() != null )
            .map( intent12 -> intent12.getExtras() )
            .map( bundle -> bundle.getString( AdvImagePagerFragment.ARG_PANAROMIC_IMAGE_DATA ) )
            .map(string -> string == null ? "show_error" : string)
            .subscribe(new DisposableMaybeObserver<String>() {
                @Override
                public void onSuccess(String s) {

                }

                @Override
                public void onError(Throwable e) {

                }

                @Override
                public void onComplete() {

                }
            })

希望这能有所帮助。

作为该流的订户,您对两种情况感兴趣:数据是否为空和数据是否为非空。这意味着,您不能像以前那样过滤出流


    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);
            });

作为该流的订户,您对两种情况感兴趣:数据是否为null和数据是否为非null。这意味着,您不能像以前那样过滤出流


    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);
            });

要根据某些条件将一个可观察对象拆分为多个可观察对象,应使用
groupBy

这是一个很好的例子

在您的情况下,您不需要它,因为您希望显示错误,并且Rx中有单独的错误机制

您可以执行以下操作:

Single.just( intent )
            .filter( intent1 -> intent1 != null && intent1.getExtras() != null )
            .map( intent12 -> intent12.getExtras() )
            .flatMap( bundle -> 
              String imageData = bundle.getString( AdvImagePagerFragment.ARG_PANAROMIC_IMAGE_DATA);
              if (imageData != null) {
                return Observanle.just(imageData); 
              } else {
                return Observable.error(new RuntimeException("something is wrong));
              }
            ).subscribe(s -> mView.handleUrl( s ),
                        error -> mView.showError( error ));

要根据某些条件将一个可观察对象拆分为多个可观察对象,应使用
groupBy

这是一个很好的例子

在您的情况下,您不需要它,因为您希望显示错误,并且Rx中有单独的错误机制

您可以执行以下操作:

Single.just( intent )
            .filter( intent1 -> intent1 != null && intent1.getExtras() != null )
            .map( intent12 -> intent12.getExtras() )
            .flatMap( bundle -> 
              String imageData = bundle.getString( AdvImagePagerFragment.ARG_PANAROMIC_IMAGE_DATA);
              if (imageData != null) {
                return Observanle.just(imageData); 
              } else {
                return Observable.error(new RuntimeException("something is wrong));
              }
            ).subscribe(s -> mView.handleUrl( s ),
                        error -> mView.showError( error ));