下面的代码只是检查空控件,并在满足所有条件的情况下使 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/