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