Java 如何在选中异常的情况下使用Observable.fromCallable()?
Java 如何在选中异常的情况下使用Observable.fromCallable()?,java,android,rx-java,reactive-programming,Java,Android,Rx Java,Reactive Programming,Observable.fromCallable()非常适合将单个函数转换为可观察函数。但是如何处理函数可能抛出的已检查异常呢 我看到的大多数示例都使用lambdas和“justwork”。但是如果没有lambdas,你会怎么做呢?例如,请参见以下引用: 现在只剩一条船了!它处理检查过的异常,不再有奇怪的Observable.just()和Observable.error()用于延迟代码执行这样简单的事情 当我尝试在没有lambda表达式的情况下实现上述Observable时,基于我所看到的其他示
Observable.fromCallable()
非常适合将单个函数转换为可观察函数。但是如何处理函数可能抛出的已检查异常呢
我看到的大多数示例都使用lambdas和“justwork”。但是如果没有lambdas,你会怎么做呢?例如,请参见以下引用:
现在只剩一条船了!它处理检查过的异常,不再有奇怪的Observable.just()和Observable.error()用于延迟代码执行这样简单的事情
当我尝试在没有lambda表达式的情况下实现上述Observable时,基于我所看到的其他示例以及Android Studio auto是如何完成的,我得到了以下结果:
Observable.fromCallable(new Func0<File>() {
@Override
public File call() {
return downloadFileFromNetwork();
}
}
Observable.fromCallable(新函数0(){
@凌驾
公共文件调用(){
从网络()返回下载文件;
}
}
但是如果
downloadFileFromNetwork()
抛出一个选中的异常,我必须尝试捕获它并将其包装成RuntimeException
。一定有更好的方法!上面的lambda如何支持这一点?!而不是将Func0
与observeable.fromCallable()一起使用
,使用可调用的。例如:
Observable.fromCallable(new Callable<File>() {
@Override
public File call() throws Exception {
return downloadFileFromNetwork();
}
}
Observable.fromCallable(newcallable(){
@凌驾
公共文件调用()引发异常{
从网络()返回下载文件;
}
}
由于Callable
的方法call()
抛出Exception
,您不必将函数包装在try-catch中!这必须是lambda在引擎盖下使用的方法。您也可以这样做以返回选中的异常:
return Observable.fromCallable(() -> {
sharedPreferences.edit()
.putString(DB_COMPANY, LoganSquare.serialize(
CompanyDBTransformation.get(user.getCompany())
))
.apply();
return user;
}).onErrorResumeNext(
throwable -> Observable.error(new CompanySerializationException(throwable))
);
因此,我在这里对IOException风险进行序列化,并给出更具描述性的描述。使用文档中的java.util.concurrent.Callable
return Observable.fromCallable(() -> {
sharedPreferences.edit()
.putString(DB_COMPANY, LoganSquare.serialize(
CompanyDBTransformation.get(user.getCompany())
))
.apply();
return user;
}).onErrorResumeNext(
throwable -> Observable.error(new CompanySerializationException(throwable))
);