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

前端之家收集整理的这篇文章主要介绍了如何在RxJava中的Observable中处理map()中的异常前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想这样做:
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块中抛出一些类型的运行时异常.这实际上应该是如何工作的.
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相关文章