Rxjava中的doOnNext的作用和在哪裡執行
阿新 • • 發佈:2019-01-03
/** * onStart裡面異常不走onError */ public class MainActivity extends AppCompatActivity { private Button btn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn = (Button) findViewById(R.id.btn); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { doOnNext(); } }); } /** * 測試doOnNext處於哪個執行緒。是否跟隨著subscribe中的onNext同一個執行緒。 */ private void doOnNext() { Observable.just(new Student("jack", 23, null)) .map(new Func1<Student, String>() { @Override public String call(Student student) { return student.getName(); } }).doOnNext(new Action1<String>() { @Override public void call(String s) { Log.e("MainActivity", "doOnNext:" + s); Log.e("MainActivity", "doOnNext:" + Thread.currentThread().getName()); } }) //.observeOn(AndroidSchedulers.mainThread()) // 發現doOnNext也在主執行緒中執行。 .observeOn(Schedulers.io()) // subcribe()裡面的onNext()在子執行緒中執行,但是doOnNext在主執行緒中 .subscribe(new Subscriber<String>() { @Override public void onNext(String name) { Log.e("MainActivity", name); Log.e("MainActivity", "subscribe():" + Thread.currentThread().getName()); } @Override public void onCompleted() { Log.e("MainActivity", "onCompleted"); } @Override public void onError(Throwable e) { Log.e("MainActivity", "onError"); } }); }}
總結:通過測試可以發現doOnNext()函式執行的地方跟subcribe()中的onNext()執行的地方沒有必然聯絡。
doOnNext()的執行在onNext()之前,對資料進行相關處理。