diff --git a/app/build.gradle b/app/build.gradle index 5ee223d..b2f0590 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,5 +1,6 @@ apply plugin: 'com.android.application' -apply plugin: 'android-apt' +apply plugin: 'android-apt' +apply plugin: 'me.tatarka.retrolambda' android { compileSdkVersion 24 buildToolsVersion "24.0.3" @@ -17,30 +18,33 @@ android { proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } } dependencies { - compile fileTree(dir: 'libs', include: ['*.jar']) + compile fileTree(include: ['*.jar'], dir: 'libs') androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) compile 'com.android.support:appcompat-v7:24.2.1' testCompile 'junit:junit:4.12' - compile 'com.jakewharton:butterknife:8.4.0' apt 'com.jakewharton:butterknife-compiler:8.4.0' - compile 'io.reactivex:rxandroid:1.0.1' // Because RxAndroid releases are few and far between, it is recommended you also // explicitly depend on RxJava's latest version for bug fixes and new features. compile 'io.reactivex:rxjava:1.0.14' compile 'io.reactivex:rxjava-math:1.0.0' compile 'com.jakewharton.rxbinding:rxbinding:0.2.0' + compile 'io.reactivex:rxandroid:1.2.1' /*rotrofit*/ - compile 'com.squareup.retrofit2:retrofit:+' - compile 'com.squareup.retrofit2:converter-gson:+' - compile 'com.squareup.retrofit2:adapter-rxjava:+' - compile 'com.google.code.gson:gson:+' + compile 'com.squareup.retrofit2:retrofit:2.1.0' + compile 'com.squareup.retrofit2:converter-gson:2.1.0' + compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0' + compile 'com.google.code.gson:gson:2.4' - compile 'io.reactivex:rxandroid:1.2.1' } diff --git a/app/src/main/java/com/demo/maat/hello_rxjava/DebounceEditTextFragment.java b/app/src/main/java/com/demo/maat/hello_rxjava/DebounceEditTextFragment.java index dad8c24..b7418e1 100644 --- a/app/src/main/java/com/demo/maat/hello_rxjava/DebounceEditTextFragment.java +++ b/app/src/main/java/com/demo/maat/hello_rxjava/DebounceEditTextFragment.java @@ -29,10 +29,8 @@ public class DebounceEditTextFragment extends Fragment { @BindView(R.id.edit_search) EditText mEditSearch; - int N=0; private Subscription subscribe; private CompositeSubscription mCompositeSubscription; - ; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, diff --git a/app/src/main/java/com/demo/maat/hello_rxjava/MainActivity.java b/app/src/main/java/com/demo/maat/hello_rxjava/MainActivity.java index 92769c4..ba45c51 100644 --- a/app/src/main/java/com/demo/maat/hello_rxjava/MainActivity.java +++ b/app/src/main/java/com/demo/maat/hello_rxjava/MainActivity.java @@ -11,6 +11,9 @@ import butterknife.ButterKnife; import butterknife.OnClick; +/** + * 地址:https://github.com/loadmail/Hello-RxJava + */ public class MainActivity extends AppCompatActivity { diff --git a/app/src/main/java/com/demo/maat/hello_rxjava/Operators1Fragment.java b/app/src/main/java/com/demo/maat/hello_rxjava/Operators1Fragment.java index 92346c9..2f3fe41 100644 --- a/app/src/main/java/com/demo/maat/hello_rxjava/Operators1Fragment.java +++ b/app/src/main/java/com/demo/maat/hello_rxjava/Operators1Fragment.java @@ -17,7 +17,6 @@ import rx.Observable; import rx.Subscriber; import rx.Subscription; -import rx.functions.Action0; import rx.functions.Action1; import rx.functions.Func1; import rx.functions.Func2; @@ -97,75 +96,65 @@ public void onClick(View view) { } } - /** - * 从3开始连续产生10个数字 - */ - - private void doRangeOperation() { - Subscription rangeSub =Observable.range(3,10).subscribe(new Subscriber() { - @Override - public void onCompleted() { - printLog("Completed"); - } - - @Override - public void onError(Throwable e) { - printLog("Error"); - } + private void doJustOperation() { + Subscription subscription = Observable.just(1, 2, 3, 4, 5) + .subscribe(new Subscriber() { + @Override + public void onNext(Integer item) { + printLog("Next" + item); + } - @Override - public void onNext(Integer i) { - printLog("Next"+i); - } - }); - mCompositeSubscription.add(rangeSub); + @Override + public void onError(Throwable error) { + printLog("Error"); + } + @Override + public void onCompleted() { + printLog("Completed"); + } + }); + mCompositeSubscription.add(subscription); } /** - * 每隔1秒输出一个数字 + * 接受一个数组,与just的区别就是接受的参数不同 */ - private void doTimerOperation() { - - Subscription timerSub=Observable.timer(1, 1, TimeUnit.SECONDS).subscribe(new Subscriber() { - @Override - public void onCompleted() { - printLog("Completed"); - } + private void doFromOperation() { + Integer[] items = {0, 1, 2, 3, 4, 5}; + Observable from = Observable.from(items); - @Override - public void onError(Throwable e) { - printLog("Error"); - } + from.subscribe( + new Action1() { + @Override + public void call(Integer item) { + printLog("Next" + item); + } + }, + error -> printLog("Error"), + () -> printLog("Completed") + ); - @Override - public void onNext(Long aLong) { - printLog("Next" + aLong); - } - }); - mCompositeSubscription.add(timerSub); } - private void doIntervalOperation() { - Subscription intervalSub=Observable.interval(1, TimeUnit.SECONDS).subscribe(new Subscriber() { + // 从1开始输出3个数,重复2次 + private void doRepeatOperation() { + Observable.range(1, 3).repeat(2).subscribe(new Subscriber() { @Override public void onCompleted() { printLog("Completed"); - } @Override public void onError(Throwable e) { printLog("Error"); - } @Override - public void onNext(Long aLong) { - printLog("Next" + aLong); + public void onNext(Integer i) { + printLog("Nest" + i); } }); - mCompositeSubscription.add(intervalSub); } /** @@ -173,6 +162,7 @@ public void onNext(Long aLong) { */ private void doRepeatWhenOperation() { + // TODO: 2016/10/18 这个有点复杂 Observable.just(1, 2, 3).repeatWhen(new Func1, Observable>() { @Override public Observable call(Observable observable) { @@ -208,9 +198,10 @@ public void onNext(Integer value) { } }); } - // 从1开始输出3个数,重复2次 - private void doRepeatOperation() { - Observable.range(1, 3).repeat(2).subscribe(new Subscriber() { + + private void doIntervalOperation() { + // TODO: 2016/10/18 间隔1s + Subscription intervalSub = Observable.interval(1, TimeUnit.SECONDS).subscribe(new Subscriber() { @Override public void onCompleted() { printLog("Completed"); @@ -222,63 +213,62 @@ public void onError(Throwable e) { } @Override - public void onNext(Integer i) { - printLog("Nest" + i); + public void onNext(Long aLong) { + printLog("Next" + aLong); } }); + mCompositeSubscription.add(intervalSub); } - /** - * 接受一个数组,与just的区别就是接受的参数不同 + * 每隔1秒输出一个数字 */ - private void doFromOperation() { - Integer[] items = {0, 1, 2, 3, 4, 5}; - Observable from = Observable.from(items); + private void doTimerOperation() { +//timer被interval替代 interval 间隔 period 周期(延迟,间隔,时间单位) + Subscription timerSub = Observable.interval(1, 1, TimeUnit.SECONDS).subscribe(new Subscriber() { + @Override + public void onCompleted() { + printLog("Completed"); + } - from.subscribe( - new Action1() { - @Override - public void call(Integer item) { - printLog("Next" + item); - } - }, - new Action1() { - @Override - public void call(Throwable error) { - printLog("Error"); - } - }, - new Action0() { - @Override - public void call() { - printLog("Compeleted"); - } - } - ); + @Override + public void onError(Throwable e) { + printLog("Error"); + } + @Override + public void onNext(Long aLong) { + printLog("Next" + aLong); + } + }); + mCompositeSubscription.add(timerSub); } - private void doJustOperation() { - Subscription subscription = Observable.just(1, 2, 3, 4, 5) - .subscribe(new Subscriber() { - @Override - public void onNext(Integer item) { - printLog("Next" + item); - } + /** + * 从3开始连续产生10个数字 + */ - @Override - public void onError(Throwable error) { - printLog("Error"); - } + private void doRangeOperation() { + Subscription rangeSub = Observable.range(3, 10).subscribe(new Subscriber() { + @Override + public void onCompleted() { + printLog("Completed"); + } + + @Override + public void onError(Throwable e) { + printLog("Error"); + } + + @Override + public void onNext(Integer i) { + printLog("Next" + i); + } + }); + mCompositeSubscription.add(rangeSub); - @Override - public void onCompleted() { - printLog("Completed"); - } - }); - mCompositeSubscription.add(subscription); } + private void printLog(String s) { Log.i(TAG, s); } diff --git a/app/src/main/java/com/demo/maat/hello_rxjava/Operators2Fragment.java b/app/src/main/java/com/demo/maat/hello_rxjava/Operators2Fragment.java index 8fa3b7d..67cdd58 100644 --- a/app/src/main/java/com/demo/maat/hello_rxjava/Operators2Fragment.java +++ b/app/src/main/java/com/demo/maat/hello_rxjava/Operators2Fragment.java @@ -67,9 +67,7 @@ public void onViewCreated(View view, Bundle savedInstanceState) { @OnClick({R.id.btn_buffer, R.id.btn_flarmap, R.id.btn_concatmap, R.id.btn_switchmap}) public void onClick(View view) { switch (view.getId()) { - case R.id.btn_buffer: - doBufferOperation(); - break; + case R.id.btn_flarmap: doflatMap(); break; @@ -79,11 +77,30 @@ public void onClick(View view) { case R.id.btn_switchmap: doSwitchmap(); break; + case R.id.btn_buffer: + doBufferOperation(); + break; } } + //与map一样,都是对数据转化,map是一对一,flatmap一对多; + private void doflatMap() { + Bean bean=new Bean(); + Observable.just(bean) + .flatMap(new Func1>() { + @Override + public Observable call(Bean bean) { + return Observable.from(bean.getData()); + } - private void doSwitchmap() { - Observable.just(10, 20, 30).switchMap(new Func1>() { + }) + .subscribe(s -> { + printLog("Flat Next"+s); + }); + + } + //与flatmap大致相同,只是产生的顺序不同; + private void doConcatmap() { + Observable.just(10, 20, 30).concatMap(new Func1>() { @Override public Observable call(Integer integer) { //10的延迟执行时间为200毫秒、20和30的延迟执行时间为180毫秒 @@ -93,17 +110,13 @@ public Observable call(Integer integer) { return Observable.from(new Integer[]{integer, integer / 2}).delay(delay, TimeUnit.MILLISECONDS); } - }).observeOn(AndroidSchedulers.mainThread()).subscribe(new Action1() { - @Override - public void call(Integer integer) { - printLog("Switch Next"+integer); - } + }).observeOn(AndroidSchedulers.mainThread()).subscribe(integer -> { + printLog("Concat Next"+integer); }); - } - //与flatmap大致相同,只是产生的顺序不同; - private void doConcatmap() { - Observable.just(10, 20, 30).concatMap(new Func1>() { + } + private void doSwitchmap() { + Observable.just(10, 20, 30).switchMap(new Func1>() { @Override public Observable call(Integer integer) { //10的延迟执行时间为200毫秒、20和30的延迟执行时间为180毫秒 @@ -116,32 +129,10 @@ public Observable call(Integer integer) { }).observeOn(AndroidSchedulers.mainThread()).subscribe(new Action1() { @Override public void call(Integer integer) { - printLog("Concat Next"+integer); + printLog("Switch Next"+integer); } }); - - } - - //与map一样,都是对数据转化,map是一对一,flatmap一对多; - private void doflatMap() { - Bean bean=new Bean(); - Observable.just(bean) - .flatMap(new Func1>() { - @Override - public Observable call(Bean bean) { - return Observable.from(bean.getData()); - } - - }) - .subscribe(new Action1() { - @Override - public void call(String s) { - printLog("Flat Next"+s); - } - }); - } - //一共发送10次信息,Observable每次缓存3秒一起发送 private void doBufferOperation() { mSubscription=Observable.create(new Observable.OnSubscribe() { diff --git a/app/src/main/java/com/demo/maat/hello_rxjava/PollingFragment.java b/app/src/main/java/com/demo/maat/hello_rxjava/PollingFragment.java index a25d6fa..23c12dd 100644 --- a/app/src/main/java/com/demo/maat/hello_rxjava/PollingFragment.java +++ b/app/src/main/java/com/demo/maat/hello_rxjava/PollingFragment.java @@ -17,8 +17,6 @@ import rx.Observable; import rx.Subscriber; import rx.Subscription; -import rx.functions.Action0; -import rx.functions.Action1; import rx.schedulers.Schedulers; import rx.subscriptions.CompositeSubscription; @@ -30,7 +28,7 @@ public class PollingFragment extends Fragment { @BindView(R.id.btn_polling) Button mBtnPolling; - int N=0; + int N = 0; private Subscription subscribe; private CompositeSubscription mCompositeSubscription; @@ -59,27 +57,20 @@ public void onViewCreated(View view, Bundle savedInstanceState) { public void onClick() { //此处有bug,subscribe无法释放,望高人pull requests - subscribe=Observable.create(new Observable.OnSubscribe() { + subscribe = Observable.create(new Observable.OnSubscribe() { @Override public void call(final Subscriber observer) { Schedulers.newThread().createWorker() - .schedulePeriodically(new Action0() { - @Override - public void call() { - observer.onNext(" "+(N++)); - } - }, 0, 1000, TimeUnit.MILLISECONDS); + .schedulePeriodically(() -> observer.onNext(" " + (N++)), 0, 1000, TimeUnit.MILLISECONDS); } }) - .subscribe(new Action1() { - @Override - public void call(String s) { - printLog("polling"+s); - } - }); + .subscribe(s -> { + printLog("polling" + s); + }); mCompositeSubscription.add(subscribe); } + private void printLog(String s) { Log.i(TAG, s); } diff --git a/app/src/main/java/com/demo/maat/hello_rxjava/RxJavaRetrofitFragment.java b/app/src/main/java/com/demo/maat/hello_rxjava/RxJavaRetrofitFragment.java index c35a280..e66bc31 100644 --- a/app/src/main/java/com/demo/maat/hello_rxjava/RxJavaRetrofitFragment.java +++ b/app/src/main/java/com/demo/maat/hello_rxjava/RxJavaRetrofitFragment.java @@ -31,7 +31,6 @@ public class RxJavaRetrofitFragment extends Fragment { private Subscription subscription; private CompositeSubscription mCompositeSubscription; - ; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, diff --git a/app/src/main/java/com/demo/maat/hello_rxjava/SchedulerFragment.java b/app/src/main/java/com/demo/maat/hello_rxjava/SchedulerFragment.java index 3c68b1c..9e24b87 100644 --- a/app/src/main/java/com/demo/maat/hello_rxjava/SchedulerFragment.java +++ b/app/src/main/java/com/demo/maat/hello_rxjava/SchedulerFragment.java @@ -11,6 +11,8 @@ import com.demo.maat.hello_rxjava.common.logger.Log; +import java.io.File; + import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; @@ -18,6 +20,7 @@ import rx.Subscriber; import rx.Subscription; import rx.android.schedulers.AndroidSchedulers; +import rx.functions.Action1; import rx.functions.Func1; import rx.schedulers.Schedulers; import rx.subscriptions.CompositeSubscription; @@ -83,9 +86,9 @@ public void onViewCreated(View view, Bundle savedInstanceState) { } - @OnClick({R.id.btn_just, R.id.btn_just_one, R.id.btn_just_two, - R.id.btn_just_three,R.id.btn_just_four, R.id.btn_just_five, - R.id.btn_just_six,R.id.btn_no_map, R.id.btn_one_map, R.id.btn_two_map, R.id.btn_long_operation}) + @OnClick({R.id.btn_just, R.id.btn_just_one, R.id.btn_just_two, + R.id.btn_just_three, R.id.btn_just_four, R.id.btn_just_five, + R.id.btn_just_six, R.id.btn_no_map, R.id.btn_one_map, R.id.btn_two_map, R.id.btn_long_operation}) public void onClick(View view) { switch (view.getId()) { case R.id.btn_just: @@ -125,8 +128,143 @@ public void onClick(View view) { } + private void myCode() { + + // TODO: 2016/10/18 如果一个Observable没有任何的的Subscriber,那么这个Observable是不会发出任何事件的。 + + // TODO: 2016/10/18 1. 创建一个Observable(被观察者)对象,直接调用Observable.create即可 + Observable myObservable = Observable.create(new Observable.OnSubscribe() { + @Override + public void call(Subscriber sub) { + // TODO: 2016/10/18 2.这里定义的Observable对象仅仅发出一个Hello World字符串,然后就结束了。 + sub.onNext("Hello, world!"); + sub.onCompleted(); + } + }); + +// TODO: 2016/10/18 3.创建一个观察者对象 + Subscriber mySubscriber = new Subscriber() { + @Override + public void onNext(String s) { + System.out.println(s); + } + + @Override + public void onCompleted() { + } + + @Override + public void onError(Throwable e) { + } + }; + + // TODO: 2016/10/18 4. 订阅关系 + myObservable.subscribe(mySubscriber); + + // TODO: 2016/10/18 说明: 一旦mySubscriber订阅了myObservable,myObservable就是调用mySubscriber对象的onNext和onComplete方法,mySubscriber就会打印出Hello World! + + + // TODO: 2016/10/18 更简洁的代码 + + // TODO: 2016/10/18 简化Observable对象的创建过程 + //todo Observable.just就是用来创建只发出一个事件就结束的Observable对象 + Observable observable = Observable.just("Hello, world!"); + + + // TODO: 2016/10/18 简化Subscriber + // TODO: 2016/10/18 并不关心OnComplete和OnError,我们只需要在onNext的时候做一些处理,这时候就可以使用Action1类 + + Action1 onNextAction = new Action1() { + @Override + public void call(String s) { + System.out.println(s); + } + }; + myObservable.subscribe(onNextAction); + + + // TODO: 2016/10/18 重载版本 myObservable.subscribe(onNextAction, onErrorAction, onCompleteAction); + // TODO: 2016/10/18 接受三个Action1类型的参数,分别对应OnNext,OnComplete, OnError函数 + +// TODO: 2016/10/18 最终版本 + + Observable.just("Hello, world!") + .subscribe(new Action1() { + @Override + public void call(String s) { + System.out.println(s); + } + }); + + // TODO: 2016/10/18 其实认清了对象就好办了 + // TODO: 2016/10/18 中心就是 Observable对象.subscribe(Subscriber对象) 肯定少不了.subscribe + // TODO: 2016/10/18 Observable对象创建: 1.Observable.create 2.Observable.just(T) + // TODO: 2016/10/18 Subscriber对象创建: 1. new Subscriber 2. new Action1 + + +// TODO: 2016/10/18 //使用map操作来完成类型转换 +//TODO String >"Hello, world!"转换成 Integer >s.hashCode() + // TODO: 2016/10/18 用到的方法是map(new Func1<>()) + Observable.just("Hello, world!") + .map(s -> { + return s.hashCode() + 11; //s.hashCode() 是一个Integer对象 + }) + .subscribe(i -> { + System.out.println(Integer.toString(i)); + }); + //简化写法 直接操作数据时的写法 获取abc的哈希值然后打印出来 + observable.just("abc").map(String::hashCode).subscribe(System.err::println); + } + + + private void myCode2() { + // TODO: 2016/10/18 map操作符的使用 线程调度 + // TODO: 2016/10/18 线程调度只有subscribeOn()和observeOn()两个方法 + + // TODO: 2016/10/18 subscribeOn()只作用于被观察者创建阶段,指示Observable的创建线程。只能指定一次 + // TODO: 2016/10/18 observeOn()可指定多次,每次指定完都在下一步生效。指定在事件传递(加工变换 map)和最终被处理(观察者 subscriber)的发生的线程。 + Observable.just("abc"). //创建Observable对象 + subscribeOn(Schedulers.newThread()).//Observable对象在子线程创建 subscribeOn + observeOn(Schedulers.io()). //将接下来执行的线程环境指定为io线程,进行耗时操作 observeOn下一步执行 + map(s -> s.hashCode() + 11). //类型转换 String转integer 耗时操作 + observeOn(AndroidSchedulers.mainThread()). //在主线程运行 observeOn 下一步执行 + subscribe(integer -> { //订阅 + android.util.Log.e("操作integer", integer.toString()); //操作integer 在主线程执行 + }); + + Observable.just("bcd"). + subscribeOn(Schedulers.newThread()).observeOn(Schedulers.io()). + + flatMap(new Func1>() { + @Override + public Observable call(String s) { + if (s.equals("bcd")) { + File f = new File("abc"); + return listFiles(f); + } + return null; + } + }).observeOn(AndroidSchedulers.mainThread()).subscribe(File::toString); + } + + private Observable listFiles(File f) { + if (f.isDirectory()) { + return Observable.from(f.listFiles()).flatMap(new Func1>() { + @Override + public Observable call(File file) { + return listFiles(f); + } + }); + } else { + return Observable.just(f); + } + } + private void doJust() { + + +// TODO: 2016/10/18 默认都在主线程 Observable.just(1, 2, 3) .subscribe(new Subscriber() { @Override @@ -148,11 +286,8 @@ public void onNext(Integer integer) { } - - - - private void doJustOne() { + // TODO: 2016/10/18 不在主线程 Observable.just(1, 2, 3) .subscribeOn(Schedulers.io()) .subscribe(new Subscriber() { @@ -164,9 +299,7 @@ public void onCompleted() { @Override public void onError(Throwable e) { printLog("onError"); - } - @Override public void onNext(Integer integer) { printLog("Next " + integer + " "); @@ -175,9 +308,8 @@ public void onNext(Integer integer) { } - - private void doJustTwo() { + // TODO: 2016/10/18 主线程 Observable.just(1, 2, 3) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) @@ -190,9 +322,7 @@ public void onCompleted() { @Override public void onError(Throwable e) { printLog("onError"); - } - @Override public void onNext(Integer integer) { printLog("Next " + integer + " "); @@ -201,18 +331,13 @@ public void onNext(Integer integer) { } - - - private void doJustThree() { + // TODO: 2016/10/18 非主线程 map类型转换 Observable.just(1, 2, 3) .subscribeOn(Schedulers.io()) - .map(new Func1() { - @Override - public String call(Integer integer) { - printLog("map "+integer+"a"); - return integer+"a"; - } + .map(integer -> { + printLog("map " + integer + "a"); + return integer + "a"; }) .subscribe(new Subscriber() { @Override @@ -228,29 +353,26 @@ public void onError(Throwable e) { @Override public void onNext(String s) { - printLog("Next " +s); + printLog("Next " + s); } }); } + + private void doJustFour() { +// TODO: 2016/10/18 两个map Observable.just(1, 2, 3) .subscribeOn(Schedulers.io()) - .map(new Func1() { - @Override - public String call(Integer integer) { - printLog("map1 "+integer+"a"); - return integer+"a"; - } + .map(integer -> { + printLog("map1 " + integer + "a"); + return integer + "a"; }) .observeOn(AndroidSchedulers.mainThread()) - .map(new Func1() { - @Override - public String call(String s) { - printLog("map2 "+s+"b "); - return s+"b"; - } + .map(s -> { + printLog("map2 " + s + "b "); + return s + "b"; }) .subscribe(new Subscriber() { @Override @@ -261,52 +383,34 @@ public void onCompleted() { @Override public void onError(Throwable e) { printLog("onError"); - } @Override public void onNext(String s) { - printLog("Next " +s); - + printLog("Next " + s); } }); } - - - - - - - - private void doJustFive() { + // TODO: 2016/10/18 3个map 方法执行顺序有什么规律吗? Observable.just(1, 2, 3) .subscribeOn(Schedulers.io()) - .map(new Func1() { - @Override - public String call(Integer integer) { - printLog("map1 "+integer+"a"); - return integer+"a"; - } + .map(integer -> { + printLog("map1 " + integer + "a"); + return integer + "a"; }) .observeOn(AndroidSchedulers.mainThread()) - .map(new Func1() { - @Override - public String call(String s) { - printLog("map2 "+s+"b "); - return s+"b"; - } + .map(s -> { + printLog("map2 " + s + "b "); + return s + "b"; }) .observeOn(Schedulers.io()) - .map(new Func1() { - @Override - public String call(String s) { - printLog("map3 "+s+"c "); - return s+"c"; - } + .map(s -> { + printLog("map3 " + s + "c "); + return s + "c"; }) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Subscriber() { @@ -323,42 +427,30 @@ public void onError(Throwable e) { @Override public void onNext(String s) { - printLog("Next " +s); - + printLog("Next " + s); } }); } - - - private void doJustSix() { + // TODO: 2016/10/18 订阅者在非主线程 Observable.just(1, 2, 3) .subscribeOn(AndroidSchedulers.mainThread()) - .map(new Func1() { - @Override - public String call(Integer integer) { - printLog("map1 "+integer+"a"); - return integer+"a"; - } + .map(integer -> { + printLog("map1 " + integer + "a"); + return integer + "a"; }) .observeOn(Schedulers.io()) - .map(new Func1() { - @Override - public String call(String s) { - printLog("map2 "+s+"b "); - return s+"b"; - } + .map(s -> { + printLog("map2 " + s + "b "); + return s + "b"; }) .observeOn(AndroidSchedulers.mainThread()) - .map(new Func1() { - @Override - public String call(String s) { - printLog("map3 "+s+"c "); - return s+"c"; - } + .map(s -> { + printLog("map3 " + s + "c "); + return s + "c"; }) .subscribeOn(Schedulers.io()) .observeOn(Schedulers.io()) @@ -367,15 +459,15 @@ public String call(String s) { public void onCompleted() { printLog("Completed"); } + @Override public void onError(Throwable e) { printLog("onError"); - } + @Override public void onNext(String s) { - printLog("Next " +s); - + printLog("Next " + s); } }); @@ -383,8 +475,7 @@ public void onNext(String s) { /** - * Subscriber加Onsubscribe基本使用,没有线程切换,没有过滤等操作 - * + * Subscriber加OnSubscribe基本使用,没有线程切换,没有过滤等操作 */ private void doBaseOperation() { @@ -393,7 +484,7 @@ private void doBaseOperation() { public void call(Subscriber subscriber) { printLog("onStart in OnSubscribe"); subscriber.onStart(); - int N = data.length; + int N = data.length; //{1,2,3} for (int i = 0; i < N; i++) { printLog("onNext " + data[i] + " in OnSubscribe"); subscriber.onNext(data[i]); @@ -407,20 +498,16 @@ public void call(Subscriber subscriber) { @Override public void onCompleted() { printLog("OnCompleted in Subscriber"); - - } @Override public void onError(Throwable e) { printLog("onError in Subscriber"); - } @Override public void onNext(String s) { printLog("onNext " + s + " in Subscriber"); - } }); mCompositeSubscription.add(baseSubscription); @@ -439,37 +526,29 @@ public void call(Subscriber subscriber) { int N = data.length; for (int i = 0; i < N; i++) { printLog("onNext " + data[i] + " in OnSubscribe"); - subscriber.onNext(data[i]); + subscriber.onNext(data[i]); // TODO: 2016/10/18 这里进行map操作 ,然后是next } printLog("OnCompleted in OnSubscribe"); subscriber.onCompleted(); - - } - }).map(new Func1() { - @Override - public String call(String s) { - String result = s + "a"; - printLog(result); - return result; } + }).map(s -> { + String result = s + "a"; + printLog(result); + return result; }).subscribe(new Subscriber() { @Override public void onCompleted() { printLog("OnCompleted in Subscriber"); - - } @Override public void onError(Throwable e) { printLog("onError in Subscriber"); - } @Override public void onNext(String s) { printLog("onNext " + s + " in Subscriber"); - } }); mCompositeSubscription.add(oneMapSubscription); @@ -488,10 +567,9 @@ public void call(Subscriber subscriber) { subscriber.onStart(); int N = data.length; for (int i = 0; i < N; i++) { - dosomethingBlockThread(); + dosomethingBlockThread(); // TODO: 2016/10/18 延时操作 printLog("onNext" + data[i] + " in OnSubscribe"); subscriber.onNext(data[i]); - } printLog("OnCompleted in OnSubscribe"); subscriber.onCompleted(); @@ -543,22 +621,16 @@ public void call(Subscriber subscriber) { } }).subscribeOn(Schedulers.io()) .observeOn(Schedulers.newThread()) - .map(new Func1() { - @Override - public String call(String s) { - String result = s + "a"; - printLog("Map1 " + result); - return result; - } + .map(s -> { + String result = s + "a"; + printLog("Map1 " + result); + return result; }) .observeOn(AndroidSchedulers.mainThread()) - .map(new Func1() { - @Override - public String call(String s) { - String result = s + "b"; - printLog("Map2 " + result); - return result; - } + .map(s -> { + String result = s + "b"; + printLog("Map2 " + result); + return result; }) // 你可以把上面的注释了,使用这个.observeOn(AndroidSchedulers.mainThread())看看map2有什么变化 // .observeOn(AndroidSchedulers.mainThread()) diff --git a/app/src/main/java/com/demo/maat/hello_rxjava/retrofit/zhihu/ZhihuManager.java b/app/src/main/java/com/demo/maat/hello_rxjava/retrofit/zhihu/ZhihuManager.java index 007bfac..5eb3724 100644 --- a/app/src/main/java/com/demo/maat/hello_rxjava/retrofit/zhihu/ZhihuManager.java +++ b/app/src/main/java/com/demo/maat/hello_rxjava/retrofit/zhihu/ZhihuManager.java @@ -23,7 +23,6 @@ public static ZhihuManager getInstance(){ } public ZhihuApi getZhihuApiService() { - if (zhihuApi == null) { if (zhihuApi == null) { zhihuApi = new Retrofit.Builder() .baseUrl("http://news-at.zhihu.com") @@ -32,7 +31,6 @@ public ZhihuApi getZhihuApiService() { .build().create(ZhihuApi.class); } - } return zhihuApi; } diff --git a/build.gradle b/build.gradle index 5a80b7d..41356cf 100644 --- a/build.gradle +++ b/build.gradle @@ -7,6 +7,7 @@ buildscript { dependencies { classpath 'com.android.tools.build:gradle:2.2.0' classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' + classpath 'me.tatarka:gradle-retrolambda:3.1.0' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files }