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