gpt4 book ai didi

java - 如何在 RxJava 中的 Observable 中处理 map() 中的异常

转载 作者:IT老高 更新时间:2023-10-28 23:20:14 25 4
gpt4 key购买 nike

我想这样做:

Observable.just(bitmap)
.map(new Func1<Bitmap, File>() {
@Override
public File call(Bitmap photoBitmap) {

//File creation throws IOException,
//I just want it to hit the onError() inside subscribe()

File photoFile = new File(App.getAppContext().getCacheDir(), "userprofilepic_temp.jpg");
if(photoFile.isFile()) {//delete the file first if it exists otherwise the new file won't be created
photoFile.delete();
}
photoFile.createNewFile(); //saves the file in the cache dir

FileOutputStream fos = new FileOutputStream(photoFile);
photoBitmap.compress(Bitmap.CompressFormat.JPEG, 90, fos);//jpeg format
fos.close();

return photoFile;

}
})
.subscribe(//continue implementation...);

基本上在call()方法中,可以抛出异常。如何让 Observer 在 onError() 中处理它。或者这不是正确的思考方式?

最佳答案

rx 将始终捕获错误,即使这是 RuntimeException。所以你可以在 catch block 中抛出某种运行时异常。实际上它应该是这样工作的。

 Observable.just(bitmap)
.map(b -> {
try {
// do some work which throws IOException
throw new IOException("something went wrong");
} catch (IOException e) {
throw new RXIOException(e);
// Or you can use
throw Exceptions.propagate(e);
// This helper method will wrap your exception with runtime one
}
}).subscribe(o -> {
// do something here
}, exception -> exception.printStackTrace());

public static class RXIOException extends RuntimeException {
public RXIOException(IOException throwable) {
super(throwable);
}
}

关于java - 如何在 RxJava 中的 Observable 中处理 map() 中的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33556076/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com