首页 > 编程语言 > 详细

Rxjava2不能再发射Null了

时间:2019-07-02 11:36:07      阅读:168      评论:0      收藏:0      [点我收藏+]

RxJava2的最大改变就是不能再流里发射Null了,有人会问发射了就怎么了,答案是你的流会因为NPE断开.

例如下面这段代码因为文件被删了找不到返回null,这时候就不触发下面Consumer的accept。

Disposable subscribe = Observable.fromCallable(new Callable<Bitmap>() {
                @Override
                public Bitmap call() {
                    FileInputStream fis;
                    Bitmap b=null;
                    try {
                        fis = new FileInputStream(path);
                        b = BitmapFactory.decodeStream(fis);
                    } catch (FileNotFoundException e) {
                        e.printStackTrace();
                    }
                    return b;
                }
            }).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Consumer<Bitmap>() {
                @Override
                public void accept(Bitmap bitmap) {
                    if (bitmap != null) {
                       viewBc.setImageBitmap(bitmap);
                    } else {
                        viewBc.setImageResource(R.drawable.wallpaper_default);
                    }
                }
            });

如果需要处理,则需要处理这种异常Consumer<Throwable>

Disposable subscribe = Observable.fromCallable(new Callable<Bitmap>() {
                @Override
                public Bitmap call() {
                    FileInputStream fis;
                    Bitmap b=null;
                    try {
                        fis = new FileInputStream(path);
                        b = BitmapFactory.decodeStream(fis);
                    } catch (FileNotFoundException e) {
                        e.printStackTrace();

                    }
                    return b;
                }
            }).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Consumer<Bitmap>() {
                @Override
                public void accept(Bitmap bitmap) {
                    if (bitmap != null) {
                       viewBc.setImageBitmap(bitmap);
                    } else {
                        viewBc.setImageResource(R.drawable.wallpaper_default);
                    }
                }
            }, new Consumer<Throwable>() {
                @Override
                public void accept(Throwable throwable) throws Exception {
                    viewBc.setImageResource(R.drawable.wallpaper_default);
                }
            });

 

Rxjava2不能再发射Null了

原文:https://www.cnblogs.com/mingfeng002/p/11119338.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!