1.导包
compile 'io.reactivex.rxjava2:rxjava:2.1.3' compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
2.主函数
public class MainActivity extends AppCompatActivity { TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv= findViewById(R.id.tv); } public void cc(View view) { switch (view.getId()) { case R.id.but1: //普通上下游传值 Observable<Integer> observable = Observable.create(new ObservableOnSubscribe<Integer>() { @Override public void subscribe(ObservableEmitter<Integer> e) throws Exception { e.onNext(1); e.onNext(2); e.onNext(3); } }); Observer<Integer> observable1 = new Observer<Integer>() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(Integer integer) { Log.d("aaa", "onNext: " + integer); tv.setText("" + integer); } @Override public void onError(Throwable e) { } @Override public void onComplete() { } }; observable.subscribe(observable1); break; case R.id.but2: //链式上下游传值 Observable.create(new ObservableOnSubscribe<Integer>() { @Override public void subscribe(ObservableEmitter<Integer> e) throws Exception { e.onNext(1); e.onNext(2); e.onNext(3); } }).subscribe(new Observer<Integer>() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(Integer integer) { tv.setText(integer + ""); } @Override public void onError(Throwable e) { } @Override public void onComplete() { } }); break; case R.id.but3: //发送中中断 Observable.create(new ObservableOnSubscribe<Integer>() { @Override public void subscribe(ObservableEmitter<Integer> e) throws Exception { e.onNext(1); e.onNext(2); e.onNext(3); e.onComplete(); e.onNext(4); } }).subscribe(new Observer<Integer>() { private Disposable mDisposable; @Override public void onSubscribe(Disposable d) { mDisposable = d; } @Override public void onNext(Integer integer) { Log.d("aa", "onNext: " + integer + mDisposable.isDisposed()); } @Override public void onError(Throwable e) { } @Override public void onComplete() { } }); break; case R.id.but4: //只关心onnext事件的操作 Observable.create(new ObservableOnSubscribe<Integer>() { @Override public void subscribe(ObservableEmitter<Integer> e) throws Exception { e.onNext(1); e.onNext(2); e.onNext(3); e.onComplete(); e.onNext(4); } }).subscribe(new Consumer<Integer>() { @Override public void accept(Integer integer) throws Exception { Log.d("aa", "accept: " + integer); } }); break; case R.id.but5: //just()方式创建Observable Observable.just("woshinidie") .subscribe(new Observer<String>() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(String s) { tv.setText(s); } @Override public void onError(Throwable e) { } @Override public void onComplete() { } } ); break; case R.id.but6: //fromIterable()方式创建Observable Observable.fromIterable(new ArrayList<String>() { { for (int i = 0; i < 5; i++) { add("sb" + i); } } }).subscribe(new Observer<String>() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(String s) { Log.d("aa", "onNext: " + s); } @Override public void onError(Throwable e) { } @Override public void onComplete() { } }); break; case R.id.but7: //defer()方式创建Observable Observable<String> ob = Observable.defer(new Callable<ObservableSource<? extends String>>() { @Override public ObservableSource<? extends String> call() throws Exception { return Observable.just("woshinidie"); } }); ob.subscribe(new Observer<String>() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(String s) { tv.setText(s); } @Override public void onError(Throwable e) { } @Override public void onComplete() { } }); break; case R.id.but8: //interval( )方式创建Observable Observable.interval(3, TimeUnit.SECONDS) .subscribe(new Observer<Long>() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(Long aLong) { tv.setText(""+aLong); } @Override public void onError(Throwable e) { } @Override public void onComplete() { } }); break; case R.id.but9: //timer( )方式创建Observable Observable.timer(5, TimeUnit.SECONDS).subscribe(new Observer<Long>() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(Long aLong) { tv.setText("延迟5s后调用了:onNext"); } @Override public void onError(Throwable e) { } @Override public void onComplete() { } }); break; case R.id.but10: //range( )方式创建Observable Observable.range(1, 5).subscribe(new Observer<Integer>() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(Integer integer) { Log.d("aa", "连续收到:" + integer); } @Override public void onError(Throwable e) { } @Override public void onComplete() { } }); break; case R.id.but11: //repeat( )方式创建Observable Observable.just(123).repeat().subscribe(new Observer<Integer>() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(Integer integer) { tv.setText("重复integer" + integer); } @Override public void onError(Throwable e) { } @Override public void onComplete() { } }); break; case R.id.but12: //map()操作符 Observable.just("hellorxjava") .map(new Function<String, Integer>() { @Override public Integer apply(String s) throws Exception { return s.length(); } }).subscribe(new Observer<Integer>() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(Integer integer) { tv.setText("接收到被转换的数据结果:"+integer); } @Override public void onError(Throwable e) { } @Override public void onComplete() { } }); break; case R.id.but13: //flatMap()操作符 Observable.just(new ArrayList<String>(){ { for (int i = 0; i < 3; i++) { add("data"+i); } } }).flatMap(new Function<List<String>, ObservableSource<?>>() { @Override public ObservableSource<?> apply(List<String> strings) throws Exception { return Observable.fromIterable(strings); } }).subscribe(new Observer<Object>() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(Object o) { Log.d("aa", "flatMap转换后,接收到的"+o); } @Override public void onError(Throwable e) { } @Override public void onComplete() { } }); break; case R.id.but14: //filter()操作符 Observable .just(new ArrayList<String>(){ { for (int i = 0; i < 5; i++) { add("data"+i); } } }) .flatMap(new Function<List<String>, ObservableSource<?>>() { @Override public ObservableSource<?> apply(List<String> strings) throws Exception { return Observable.fromIterable(strings); } }).filter(new Predicate<Object>() { @Override public boolean test(Object s) throws Exception { String newStr = (String) s; if (newStr.contains("3")){ return true; } return false; } }).subscribe(new Consumer<Object>() { @Override public void accept(Object o) throws Exception { Log.d("aa", "accept: "+(String)o); } }); break; case R.id.but15: //take()操作符 Observable.just(new ArrayList<String>(){ { for (int i = 0; i < 8; i++) { add("data"+i); } } }).flatMap(new Function<List<String>, ObservableSource<?>>() { @Override public ObservableSource<?> apply(List<String> strings) throws Exception { return Observable.fromIterable(strings); } }).take(5).subscribe(new Consumer<Object>() { @Override public void accept(Object s) throws Exception { Log.d("aa", s.toString()); } }); break; case R.id.but16: //doOnNext()操作符 Observable.just(new ArrayList<String>(){ { for (int i = 0; i < 6; i++) { add("data"+i); } } }).flatMap(new Function<List<String>, ObservableSource<?>>() { @Override public ObservableSource<?> apply(List<String> strings) throws Exception { return Observable.fromIterable(strings); } }).take(5).doOnNext(new Consumer<Object>() { @Override public void accept(Object o) throws Exception { Log.d("aa", "额外的准备工作!"); } }).subscribe(new Consumer<Object>() { @Override public void accept(Object s) throws Exception { Log.d("aa", s.toString()); } }); break; } } }
3.主布局
<?xml version="1.0" encoding="utf-8"?> <LinearLayout android:orientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="comqq.example.hasee.myapplication.MainActivity"> <Button android:id="@+id/but1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="普通上下游传值" android:onClick="cc"/> <Button android:id="@+id/but2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="链式上下游传值" android:onClick="cc"/> <Button android:id="@+id/but3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="发送中中断" android:onClick="cc"/> <Button android:id="@+id/but4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="只关心onnext事件的操作" android:onClick="cc"/> <Button android:id="@+id/but5" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="just()方式创建Observable" android:onClick="cc"/> <Button android:id="@+id/but6" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="fromIterable()方式创建Observable" android:onClick="cc"/> <Button android:id="@+id/but7" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="defer()方式创建Observable" android:onClick="cc"/> <Button android:id="@+id/but8" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="interval( )方式创建Observable" android:onClick="cc"/> <Button android:id="@+id/but9" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="timer( )方式创建Observable" android:onClick="cc"/> <Button android:id="@+id/but10" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="range( )方式创建Observable" android:onClick="cc"/> <Button android:id="@+id/but11" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="repeat( )方式创建Observable" android:onClick="cc"/> <Button android:id="@+id/but12" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="map()操作符" android:onClick="cc"/> <Button android:id="@+id/but13" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="flatMap()操作符" android:onClick="cc"/> <Button android:id="@+id/but14" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="filter()操作符" android:onClick="cc"/> <Button android:id="@+id/but15" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="take()操作符" android:onClick="cc"/> <Button android:id="@+id/but16" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="doOnNext()操作符" android:onClick="cc"/> <TextView android:id="@+id/tv" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>