在RxJava中使用else语句
下面的代码只是检查null控件,如果提供了所有条件,则使在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
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 ));