Rxjava2不能再發射Null了


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM