函数名 | 函数用途 | 函数原型 |
doOnNext | 在每次发射元素之前(调用subScriber.onNext())做一些额外的事情,不改变发射元素的值,只是插入了一个侦听 | Observable<T> doOnNext(final Action1<? super T> onNext) |
doOnCompleted | 在发射完成通知之前做一些额外的事情,不改变原有逻辑流,只是插入了一个侦听 | Observable<T> doOnCompleted(final Action0 onCompleted) |
doOnError | 在发射错误通知之前做一些额外的事情,不改变原有逻辑流,只是插入了一个侦听 | Observable<T> doOnError(final Action1<Throwable> onError) |
doOnTerminate | 在发射通知之前做一些额外的事情(即对onError和onCompleted的调用进行了侦听) | Observable<T> doOnTerminate(final Action0 onTerminate) |
doOnEach | 对发射元素和发射通知进行了统一的封装,用于在发射元素或者发射通知之前做一些额外的事情 | Observable<T> doOnEach(final Action1<Notification<? super T>> onNotification)Observable<T> doOnEach(Observer<? super T> observer) |
doOnRequest | 通常用于跟踪调试,当订阅者开始请求数据时,可以通过这个方法进行侦听,一般是每subscribe一个订阅者就会触发一次 | Observable<T> doOnRequest(final Action1<Long> onRequest) |
doOnSubscribe | 当订阅者订阅时,可以通过这个方法侦听,它会早于doOnRequest被调用 | Observable<T> doOnSubscribe(final Action0 subscribe) |
doOnUnsubscribe | 当订阅者取消订阅时,可以通过这个方法侦听 | Observable<T> doOnUnsubscribe(final Action0 unsubscribe) |
下面是本次学习的用例:
private void testOperDo(){ String SDCARD = Environment.getExternalStorageDirectory().toString(); ArrayList<File> folders = new ArrayList<>(); folders.add(new File(SDCARD + File.separator + "BangBang" + File.separator)); Observable observable12 = Observable.from(folders) .flatMap(new Func1<File, Observable<File>>() { @Override public Observable<File> call(File file) { Log.e("chwn", "flatMap>>call:" + file.getName()); if(file.isDirectory()) { return Observable.from(file.listFiles()); } else{ return Observable.just(file); } } }).doOnRequest(new Action1<Long>() { @Override public void call(Long aLong) { Log.e("chwn", "doOnRequest>>" + aLong); } }).doOnEach(new Action1<Notification<? super File>>() { @Override public void call(Notification<? super File> notification) { Log.e("chwn", "doOnEach>>kind:" + notification.getKind()); if(notification.isOnNext()){ Log.e("chwn", "doOnEach>>" + notification.getValue().toString()); } } }).doOnNext(new Action1<File>() { @Override public void call(File file) { Log.e("chwn", "doOnNext>>" + file.getName()); } }).doOnSubscribe(new Action0() { @Override public void call() { Log.e("chwn", "doOnSubscribe>>" + SystemClock.currentThreadTimeMillis()); } }); observable12.subscribe(new Action1<File>() { @Override public void call(File file) { Log.e("chwn", "subscribe1>>" + file.getName()); } }); folders.add(new File(SDCARD + File.separator + "Pictures"+File.separator)); observable12.subscribe(new Action1<File>() { @Override public void call(File file) { Log.e("chwn", "subscribe2>>" + file.getName()); } }); }