From f7e3549cbb8f8fa89dd71e020c03ebffe07d2c46 Mon Sep 17 00:00:00 2001 From: AMIT SHEKHAR Date: Tue, 24 Jan 2017 10:38:39 +0530 Subject: [PATCH 01/94] Window example explained --- .../android/samples/ui/operators/WindowExampleActivity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/WindowExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/WindowExampleActivity.java index fb841dc..aced36b 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/WindowExampleActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/WindowExampleActivity.java @@ -1 +1 @@ -package com.rxjava2.android.samples.ui.operators; import android.util.Log; import com.rxjava2.android.samples.ui.ExampleBaseActivity; import com.rxjava2.android.samples.utils.AppConstant; import java.util.concurrent.TimeUnit; import io.reactivex.Observable; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.functions.Consumer; import io.reactivex.schedulers.Schedulers; public class WindowExampleActivity extends ExampleBaseActivity { /* * Sample of window operator */ protected void doSomeWork() { Observable.interval(1, TimeUnit.SECONDS).take(12) .window(3, TimeUnit.SECONDS) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Consumer>() { @Override public void accept(Observable observable) { Log.d(TAG, "Sub Divide begin...."); textView.append("Sub Divide begin ...."); textView.append(AppConstant.LINE_SEPARATOR); observable .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Consumer() { @Override public void accept(Long aLong) { Log.d(TAG, "Next:" + aLong); textView.append("Next:" + aLong); textView.append(AppConstant.LINE_SEPARATOR); } }); } }); /* 输出 subdivide begin…… Next:0 Next:1 subdivide begin…… Next:2 Next:3 Next:4 subdivide begin…… Next:5 Next:6 Next:7 subdivide begin…… Next:8 Next:9 Next:10 subdivide begin…… Next:11 为什么不是 0,1,2 3,4,5 ..... 这种形式呢。 同学,问的非常好!!! 因为0秒的时刻啥也没发射,1秒的时刻发射了0,2秒的时刻发射了1,3秒的时刻发射了2 "对呀,前3秒嘛,因该0,1,2嘛",但是3秒是指时间片段,[0,1) [1,2) [2,3) 左闭右开 这三秒只发射了0和1 */ } } \ No newline at end of file +package com.rxjava2.android.samples.ui.operators; import android.util.Log; import com.rxjava2.android.samples.ui.ExampleBaseActivity; import com.rxjava2.android.samples.utils.AppConstant; import java.util.concurrent.TimeUnit; import io.reactivex.Observable; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.functions.Consumer; import io.reactivex.schedulers.Schedulers; public class WindowExampleActivity extends ExampleBaseActivity { /* * Example using window operator -> It periodically * subdivide items from an Observable into * Observable windows and emit these windows rather than * emitting the items one at a time */ protected void doSomeWork() { Observable.interval(1, TimeUnit.SECONDS).take(12) .window(3, TimeUnit.SECONDS) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Consumer>() { @Override public void accept(Observable observable) { Log.d(TAG, "Sub Divide begin...."); textView.append("Sub Divide begin ...."); textView.append(AppConstant.LINE_SEPARATOR); observable .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Consumer() { @Override public void accept(Long value) { Log.d(TAG, "Next:" + value); textView.append("Next:" + value); textView.append(AppConstant.LINE_SEPARATOR); } }); } }); } } \ No newline at end of file From 441ddf532ca1f0d3dfb87f66315e5da405453f14 Mon Sep 17 00:00:00 2001 From: AMIT SHEKHAR Date: Wed, 25 Jan 2017 12:58:47 +0530 Subject: [PATCH 02/94] Update links --- README.md | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 114898d..cd64da2 100644 --- a/README.md +++ b/README.md @@ -75,22 +75,22 @@ RxJava1 -> RxJava2 # Highlights of the examples : -* [DisposableExampleActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/operators/DisposableExampleActivity.java) - Using `CompositeDisposable` -* [FlowableExampleActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/operators/FlowableExampleActivity.java) - Using `Flowable` and `reduce` operator -* [SingleObserverExampleActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/operators/SingleObserverExampleActivity.java) - Using `SingleObserver` -* [CompletableObserverActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/operators/CompletableObserverExampleActivity.java) - Using `CompletableObserver` -* [MapExampleActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/operators/MapExampleActivity.java) - Using `map` Operator -* [ZipExampleActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/operators/ZipExampleActivity.java) - Using `zip` Operator -* [BufferExampleActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/operators/BufferExampleActivity.java) - Using `buffer` Operator -* [TakeExampleActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/operators/TakeExampleActivity.java) - Using `take` Operator -* [ReduceExampleActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/operators/ReduceExampleActivity.java) - Using `reduce` Operator -* [FilterExampleActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/operators/FilterExampleActivity.java) - Using `filter` Operator -* [SkipExampleActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/operators/SkipExampleActivity.java) - Using `skip` Operator -* [ReplayExampleActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/operators/ReplayExampleActivity.java) - Using `replay` Operator -* [ConcatExampleActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/operators/ConcatExampleActivity.java) - Using `concat` Operator -* [MergeExampleActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/operators/MergeExampleActivity.java) - Using `merge` Operator -* [DeferExampleActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/operators/DeferExampleActivity.java) - Using `defer` Observable -* [IntervalExampleActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/operators/IntervalExampleActivity.java) - Using `Interval` +* [DisposableExampleActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/operators/DisposableExampleActivity.java) - Using `CompositeDisposable` +* [FlowableExampleActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/operators/FlowableExampleActivity.java) - Using `Flowable` and `reduce` operator +* [SingleObserverExampleActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/operators/SingleObserverExampleActivity.java) - Using `SingleObserver` +* [CompletableObserverActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/operators/CompletableObserverExampleActivity.java) - Using `CompletableObserver` +* [MapExampleActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/operators/MapExampleActivity.java) - Using `map` Operator +* [ZipExampleActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/operators/ZipExampleActivity.java) - Using `zip` Operator +* [BufferExampleActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/operators/BufferExampleActivity.java) - Using `buffer` Operator +* [TakeExampleActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/operators/TakeExampleActivity.java) - Using `take` Operator +* [ReduceExampleActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/operators/ReduceExampleActivity.java) - Using `reduce` Operator +* [FilterExampleActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/operators/FilterExampleActivity.java) - Using `filter` Operator +* [SkipExampleActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/operators/SkipExampleActivity.java) - Using `skip` Operator +* [ReplayExampleActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/operators/ReplayExampleActivity.java) - Using `replay` Operator +* [ConcatExampleActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/operators/ConcatExampleActivity.java) - Using `concat` Operator +* [MergeExampleActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/operators/MergeExampleActivity.java) - Using `merge` Operator +* [DeferExampleActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/operators/DeferExampleActivity.java) - Using `defer` Observable +* [IntervalExampleActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/operators/IntervalExampleActivity.java) - Using `Interval` ### TODO From e2431327f1abbf2d4f7195a3b8b5782520f84664 Mon Sep 17 00:00:00 2001 From: AMIT SHEKHAR Date: Thu, 26 Jan 2017 17:58:44 +0530 Subject: [PATCH 03/94] Minor changes --- .../main/java/com/rxjava2/android/samples/MyApplication.java | 2 +- .../main/java/com/rxjava2/android/samples/utils/Utils.java | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/rxjava2/android/samples/MyApplication.java b/app/src/main/java/com/rxjava2/android/samples/MyApplication.java index b5c7649..be870d6 100644 --- a/app/src/main/java/com/rxjava2/android/samples/MyApplication.java +++ b/app/src/main/java/com/rxjava2/android/samples/MyApplication.java @@ -8,7 +8,7 @@ public class MyApplication extends Application { - public static final String TAG = MyApplication.class.getSimpleName(); + public static final String TAG = "MyApplication"; @Override public void onCreate() { diff --git a/app/src/main/java/com/rxjava2/android/samples/utils/Utils.java b/app/src/main/java/com/rxjava2/android/samples/utils/Utils.java index addd892..ecd5a4d 100644 --- a/app/src/main/java/com/rxjava2/android/samples/utils/Utils.java +++ b/app/src/main/java/com/rxjava2/android/samples/utils/Utils.java @@ -11,6 +11,10 @@ */ public class Utils { + private Utils() { + // This class in not publicly instantiable. + } + public static List getUserList() { List userList = new ArrayList<>(); From 50cc3c388f93ebd3734264c5efe0bb09a6b027ff Mon Sep 17 00:00:00 2001 From: AMIT SHEKHAR Date: Fri, 3 Feb 2017 20:00:33 +0530 Subject: [PATCH 04/94] Code refactor for simplicity --- .../rxjava2/android/samples/model/Car.java | 1 - .../samples/ui/ExampleBaseActivity.java | 226 ------------------ .../AsyncSubjectExampleActivity.java | 112 ++++++++- .../BehaviorSubjectExampleActivity.java | 106 +++++++- .../ui/operators/BufferExampleActivity.java | 84 ++++++- .../CompletableObserverExampleActivity.java | 75 ++++-- .../ui/operators/ConcatExampleActivity.java | 69 +++++- .../ui/operators/DebounceExampleActivity.java | 82 +++++-- .../ui/operators/DeferExampleActivity.java | 69 +++++- .../operators/DisposableExampleActivity.java | 56 ++++- .../ui/operators/DistinctExampleActivity.java | 79 +++++- .../ui/operators/FilterExampleActivity.java | 72 +++++- .../ui/operators/FlowableExampleActivity.java | 105 ++++---- .../ui/operators/IntervalExampleActivity.java | 62 ++++- .../LastOperatorExampleActivity.java | 66 ++++- .../ui/operators/MapExampleActivity.java | 71 +++++- .../ui/operators/MergeExampleActivity.java | 69 +++++- .../PublishSubjectExampleActivity.java | 114 ++++++++- .../ui/operators/ReduceExampleActivity.java | 68 +++++- .../ui/operators/ReplayExampleActivity.java | 108 ++++++++- .../ReplaySubjectExampleActivity.java | 116 +++++++-- .../ui/operators/ScanExampleActivity.java | 74 +++++- .../ui/operators/SimpleExampleActivity.java | 66 ++++- .../SingleObserverExampleActivity.java | 73 ++++-- .../ui/operators/SkipExampleActivity.java | 67 +++++- .../ui/operators/TakeExampleActivity.java | 70 +++++- .../ThrottleFirstExampleActivity.java | 81 ++++++- .../ThrottleLastExampleActivity.java | 76 +++++- .../ui/operators/TimerExampleActivity.java | 70 +++++- .../ui/operators/WindowExampleActivity.java | 2 +- .../ui/operators/ZipExampleActivity.java | 72 +++++- 31 files changed, 1969 insertions(+), 492 deletions(-) delete mode 100644 app/src/main/java/com/rxjava2/android/samples/ui/ExampleBaseActivity.java diff --git a/app/src/main/java/com/rxjava2/android/samples/model/Car.java b/app/src/main/java/com/rxjava2/android/samples/model/Car.java index 90f86ee..e223650 100644 --- a/app/src/main/java/com/rxjava2/android/samples/model/Car.java +++ b/app/src/main/java/com/rxjava2/android/samples/model/Car.java @@ -17,7 +17,6 @@ public void setBrand(String brand) { } public Observable brandDeferObservable() { -// return Observable.just(brand); return Observable.defer(new Callable>() { @Override public ObservableSource call() throws Exception { diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/ExampleBaseActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/ExampleBaseActivity.java deleted file mode 100644 index e894963..0000000 --- a/app/src/main/java/com/rxjava2/android/samples/ui/ExampleBaseActivity.java +++ /dev/null @@ -1,226 +0,0 @@ -package com.rxjava2.android.samples.ui; - -import android.os.Bundle; -import android.support.v7.app.AppCompatActivity; -import android.util.Log; -import android.view.View; -import android.widget.Button; -import android.widget.TextView; - -import com.rxjava2.android.samples.R; -import com.rxjava2.android.samples.utils.AppConstant; - -import java.util.List; - -import io.reactivex.CompletableObserver; -import io.reactivex.MaybeObserver; -import io.reactivex.Observer; -import io.reactivex.SingleObserver; -import io.reactivex.disposables.Disposable; -import io.reactivex.observers.DisposableObserver; - -/** - * Created by threshold on 2017/1/11. - */ - -public abstract class ExampleBaseActivity extends AppCompatActivity { - - protected String TAG = getClass().getSimpleName(); - protected Button btn; - protected TextView textView; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_example); - btn = (Button) findViewById(R.id.btn); - textView = (TextView) findViewById(R.id.textView); - btn.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - doSomeWork(); - } - }); - } - - /** - * Do some work on button click. - */ - protected abstract void doSomeWork(); - - protected Observer getObserver() { - return getObserver(""); - } - - protected Observer getObserver(final Object observerTag) { - return new Observer() { - - @Override - public void onSubscribe(Disposable d) { - ExampleBaseActivity.this.onSubscribe(observerTag, d); - } - - @Override - public void onNext(T value) { - ExampleBaseActivity.this.onNext(observerTag, value); - } - - @Override - public void onError(Throwable e) { - ExampleBaseActivity.this.onError(observerTag, e); - } - - @Override - public void onComplete() { - ExampleBaseActivity.this.onComplete(observerTag); - } - }; - } - - protected CompletableObserver getCompletableObserver() { - return getCompletableObserver(""); - } - - protected CompletableObserver getCompletableObserver(final Object observerTag) { - return new CompletableObserver() { - @Override - public void onSubscribe(Disposable d) { - ExampleBaseActivity.this.onSubscribe(observerTag, d); - } - - @Override - public void onComplete() { - ExampleBaseActivity.this.onComplete(observerTag); - } - - @Override - public void onError(Throwable e) { - ExampleBaseActivity.this.onError(observerTag, e); - } - }; - } - - protected DisposableObserver getDisposableObserver() { - return getDisposableObserver(""); - } - - protected DisposableObserver getDisposableObserver(final Object observerTag) { - return new DisposableObserver() { - @Override - public void onNext(T t) { - ExampleBaseActivity.this.onNext(observerTag, t); - } - - @Override - public void onError(Throwable e) { - ExampleBaseActivity.this.onError(observerTag, e); - } - - @Override - public void onComplete() { - ExampleBaseActivity.this.onComplete(observerTag); - } - }; - } - - protected SingleObserver getSingleObserver() { - return getSingleObserver(""); - } - - protected SingleObserver getSingleObserver(final Object observerTag) { - return new SingleObserver() { - @Override - public void onSubscribe(Disposable d) { - ExampleBaseActivity.this.onSubscribe(observerTag, d); - } - - @Override - public void onSuccess(T t) { - ExampleBaseActivity.this.onNext(observerTag, t); - } - - @Override - public void onError(Throwable e) { - ExampleBaseActivity.this.onError(observerTag, e); - } - }; - } - - protected MaybeObserver getMaybeObserver() { - return getMaybeObserver(""); - } - - protected MaybeObserver getMaybeObserver(final Object observerTag) { - return new MaybeObserver() { - @Override - public void onSubscribe(Disposable d) { - ExampleBaseActivity.this.onSubscribe(observerTag, d); - } - - @Override - public void onSuccess(T t) { - ExampleBaseActivity.this.onSuccess(observerTag, t); - } - - @Override - public void onError(Throwable e) { - ExampleBaseActivity.this.onError(observerTag, e); - } - - @Override - public void onComplete() { - ExampleBaseActivity.this.onComplete(observerTag); - } - }; - } - - protected void onSubscribe(Object observerTag, Disposable d) { - String msg = observerTag + " onSubscribe"; - if (d != null) { - msg = msg + ": isDisposed :" + d.isDisposed(); - } - Log.d(TAG, msg); - textView.append(msg); - textView.append(AppConstant.LINE_SEPARATOR); - } - - protected void onNext(Object observerTag, T value) { - onPositive(observerTag, "onNext", value); - } - - protected void onSuccess(Object observerTag, T value) { - onPositive(observerTag, "onSuccess", value); - } - - private void onPositive(Object observerTag, String positiveKey, T value) { - if (value instanceof List) { - List valueList = (List) value; - Log.d(TAG, observerTag + " " + positiveKey + " size :" + valueList.size()); - textView.append(observerTag + " " + positiveKey + " size :" + valueList.size()); - textView.append(AppConstant.LINE_SEPARATOR); - for (Object obj : valueList) { - Log.d(TAG, " : value : " + obj.toString()); - textView.append(" value : " + obj.toString()); - textView.append(AppConstant.LINE_SEPARATOR); - } - } else { - Log.d(TAG, observerTag + " " + positiveKey + " value : " + value); - textView.append(observerTag + " " + positiveKey + " : value : " + value); - textView.append(AppConstant.LINE_SEPARATOR); - } - } - - protected void onError(Object observerTag, Throwable e) { - textView.append(observerTag + " onError : " + e.getMessage()); - textView.append(AppConstant.LINE_SEPARATOR); - Log.e(TAG, observerTag + " onError : ", e); - } - - public void onComplete(Object observerTag) { - textView.append(observerTag + " onComplete"); - textView.append(AppConstant.LINE_SEPARATOR); - Log.d(TAG, observerTag + " onComplete"); - } - - -} diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/AsyncSubjectExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/AsyncSubjectExampleActivity.java index 3626c7d..501bc63 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/AsyncSubjectExampleActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/AsyncSubjectExampleActivity.java @@ -1,41 +1,131 @@ package com.rxjava2.android.samples.ui.operators; -import com.rxjava2.android.samples.ui.ExampleBaseActivity; +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.TextView; +import com.rxjava2.android.samples.R; +import com.rxjava2.android.samples.utils.AppConstant; + +import io.reactivex.Observer; +import io.reactivex.disposables.Disposable; import io.reactivex.subjects.AsyncSubject; /** * Created by amitshekhar on 17/12/16. */ -public class AsyncSubjectExampleActivity extends ExampleBaseActivity { +public class AsyncSubjectExampleActivity extends AppCompatActivity { + + private static final String TAG = AsyncSubjectExampleActivity.class.getSimpleName(); + Button btn; + TextView textView; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_example); + btn = (Button) findViewById(R.id.btn); + textView = (TextView) findViewById(R.id.textView); + + btn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + doSomeWork(); + } + }); + } /* An AsyncSubject emits the last value (and only the last value) emitted by the source * Observable, and only after that source Observable completes. (If the source Observable * does not emit any values, the AsyncSubject also completes without emitting any values.) */ - protected void doSomeWork() { + private void doSomeWork() { + AsyncSubject source = AsyncSubject.create(); - source.onNext(0); - source.subscribe(getObserver("First")); // it will emit only 4 and onComplete + source.subscribe(getFirstObserver()); // it will emit only 4 and onComplete source.onNext(1); source.onNext(2); source.onNext(3); /* - * it will also emit 4 and onComplete for second observer also. + * it will emit 4 and onComplete for second observer also. */ - source.subscribe(getObserver("Second")); + source.subscribe(getSecondObserver()); source.onNext(4); source.onComplete(); - /* - * it will also emit 4 and onComplete for second observer also. - */ - source.subscribe(getObserver("Third")); + } + + + private Observer getFirstObserver() { + return new Observer() { + + @Override + public void onSubscribe(Disposable d) { + Log.d(TAG, " First onSubscribe : " + d.isDisposed()); + } + + @Override + public void onNext(Integer value) { + textView.append(" First onNext : value : " + value); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " First onNext value : " + value); + } + + @Override + public void onError(Throwable e) { + textView.append(" First onError : " + e.getMessage()); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " First onError : " + e.getMessage()); + } + + @Override + public void onComplete() { + textView.append(" First onComplete"); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " First onComplete"); + } + }; + } + + private Observer getSecondObserver() { + return new Observer() { + + @Override + public void onSubscribe(Disposable d) { + textView.append(" Second onSubscribe : isDisposed :" + d.isDisposed()); + Log.d(TAG, " Second onSubscribe : " + d.isDisposed()); + textView.append(AppConstant.LINE_SEPARATOR); + } + + @Override + public void onNext(Integer value) { + textView.append(" Second onNext : value : " + value); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " Second onNext value : " + value); + } + + @Override + public void onError(Throwable e) { + textView.append(" Second onError : " + e.getMessage()); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " Second onError : " + e.getMessage()); + } + + @Override + public void onComplete() { + textView.append(" Second onComplete"); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " Second onComplete"); + } + }; } diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/BehaviorSubjectExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/BehaviorSubjectExampleActivity.java index cac0bd8..3e2d9cd 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/BehaviorSubjectExampleActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/BehaviorSubjectExampleActivity.java @@ -1,24 +1,53 @@ package com.rxjava2.android.samples.ui.operators; -import com.rxjava2.android.samples.ui.ExampleBaseActivity; +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.TextView; +import com.rxjava2.android.samples.R; +import com.rxjava2.android.samples.utils.AppConstant; + +import io.reactivex.Observer; +import io.reactivex.disposables.Disposable; import io.reactivex.subjects.BehaviorSubject; /** * Created by amitshekhar on 17/12/16. */ -public class BehaviorSubjectExampleActivity extends ExampleBaseActivity { +public class BehaviorSubjectExampleActivity extends AppCompatActivity { + + private static final String TAG = BehaviorSubjectExampleActivity.class.getSimpleName(); + Button btn; + TextView textView; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_example); + btn = (Button) findViewById(R.id.btn); + textView = (TextView) findViewById(R.id.textView); + + btn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + doSomeWork(); + } + }); + } /* When an observer subscribes to a BehaviorSubject, it begins by emitting the item most * recently emitted by the source Observable (or a seed/default value if none has yet been * emitted) and then continues to emit any other items emitted later by the source Observable(s). */ - protected void doSomeWork() { + private void doSomeWork() { - BehaviorSubject source = BehaviorSubject.createDefault(-1); + BehaviorSubject source = BehaviorSubject.create(); - source.subscribe(getObserver("First")); // it will get -1, 1, 2, 3, 4 and onComplete + source.subscribe(getFirstObserver()); // it will get 1, 2, 3, 4 and onComplete source.onNext(1); source.onNext(2); @@ -27,13 +56,76 @@ protected void doSomeWork() { /* * it will emit 3(last emitted), 4 and onComplete for second observer also. */ - source.subscribe(getObserver("Second")); + source.subscribe(getSecondObserver()); source.onNext(4); source.onComplete(); - source.subscribe(getObserver("Third")); + } + + + private Observer getFirstObserver() { + return new Observer() { + + @Override + public void onSubscribe(Disposable d) { + Log.d(TAG, " First onSubscribe : " + d.isDisposed()); + } + + @Override + public void onNext(Integer value) { + textView.append(" First onNext : value : " + value); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " First onNext value : " + value); + } + + @Override + public void onError(Throwable e) { + textView.append(" First onError : " + e.getMessage()); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " First onError : " + e.getMessage()); + } + + @Override + public void onComplete() { + textView.append(" First onComplete"); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " First onComplete"); + } + }; + } + + private Observer getSecondObserver() { + return new Observer() { + + @Override + public void onSubscribe(Disposable d) { + textView.append(" Second onSubscribe : isDisposed :" + d.isDisposed()); + Log.d(TAG, " Second onSubscribe : " + d.isDisposed()); + textView.append(AppConstant.LINE_SEPARATOR); + } + + @Override + public void onNext(Integer value) { + textView.append(" Second onNext : value : " + value); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " Second onNext value : " + value); + } + + @Override + public void onError(Throwable e) { + textView.append(" Second onError : " + e.getMessage()); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " Second onError : " + e.getMessage()); + } + @Override + public void onComplete() { + textView.append(" Second onComplete"); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " Second onComplete"); + } + }; } diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/BufferExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/BufferExampleActivity.java index f779842..ead4b70 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/BufferExampleActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/BufferExampleActivity.java @@ -1,22 +1,54 @@ package com.rxjava2.android.samples.ui.operators; -import com.rxjava2.android.samples.ui.ExampleBaseActivity; +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.TextView; + +import com.rxjava2.android.samples.R; +import com.rxjava2.android.samples.utils.AppConstant; + +import java.util.List; import io.reactivex.Observable; +import io.reactivex.Observer; +import io.reactivex.disposables.Disposable; /** * Created by amitshekhar on 27/08/16. */ -public class BufferExampleActivity extends ExampleBaseActivity { +public class BufferExampleActivity extends AppCompatActivity { + + private static final String TAG = BufferExampleActivity.class.getSimpleName(); + Button btn; + TextView textView; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_example); + btn = (Button) findViewById(R.id.btn); + textView = (TextView) findViewById(R.id.textView); + + btn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + doSomeWork(); + } + }); + } /* * simple example using buffer operator - bundles all emitted values into a list */ - protected void doSomeWork() { + private void doSomeWork() { + Observable> buffered = getObservable().buffer(3, 1); - // count = 3 means, it takes max of three from its start index and create list - // skip = 1 means, it jumps one step every time + // 3 means, it takes max of three from its start index and create list + // 1 means, it jumps one step every time // so the it gives the following list // 1 - one, two, three // 2 - two, three, four @@ -24,13 +56,49 @@ protected void doSomeWork() { // 4 - four, five // 5 - five - getObservable().buffer(3, 1) - .subscribe(getObserver()); - + buffered.subscribe(getObserver()); } private Observable getObservable() { return Observable.just("one", "two", "three", "four", "five"); } + private Observer> getObserver() { + return new Observer>() { + + @Override + public void onSubscribe(Disposable d) { + Log.d(TAG, " onSubscribe : " + d.isDisposed()); + } + + @Override + public void onNext(List stringList) { + textView.append(" onNext size : " + stringList.size()); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " onNext : size :" + stringList.size()); + for (String value : stringList) { + textView.append(" value : " + value); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " : value :" + value); + } + + } + + @Override + public void onError(Throwable e) { + textView.append(" onError : " + e.getMessage()); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " onError : " + e.getMessage()); + } + + @Override + public void onComplete() { + textView.append(" onComplete"); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " onComplete"); + } + }; + } + + } \ No newline at end of file diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/CompletableObserverExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/CompletableObserverExampleActivity.java index 3089d8e..1f7451a 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/CompletableObserverExampleActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/CompletableObserverExampleActivity.java @@ -1,39 +1,52 @@ package com.rxjava2.android.samples.ui.operators; -import com.rxjava2.android.samples.ui.ExampleBaseActivity; +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.TextView; -import java.util.Random; +import com.rxjava2.android.samples.R; +import com.rxjava2.android.samples.utils.AppConstant; + +import java.util.concurrent.TimeUnit; import io.reactivex.Completable; -import io.reactivex.CompletableEmitter; -import io.reactivex.CompletableOnSubscribe; +import io.reactivex.CompletableObserver; import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.disposables.Disposable; import io.reactivex.schedulers.Schedulers; /** * Created by amitshekhar on 27/08/16. */ -public class CompletableObserverExampleActivity extends ExampleBaseActivity { +public class CompletableObserverExampleActivity extends AppCompatActivity { - /* - * simple example using CompletableObserver - * Completable does not consist of onNext() - */ - protected void doSomeWork() { + private static final String TAG = CompletableObserverExampleActivity.class.getSimpleName(); + Button btn; + TextView textView; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_example); + btn = (Button) findViewById(R.id.btn); + textView = (TextView) findViewById(R.id.textView); - Completable completable = Completable.create(new CompletableOnSubscribe() { + btn.setOnClickListener(new View.OnClickListener() { @Override - public void subscribe(CompletableEmitter e) throws Exception { - if (!e.isDisposed()) { - int randomInt = new Random().nextInt(10); - if (randomInt % 2 == 0) { - e.onComplete(); - } else { - e.onError(new IllegalStateException("Can't complete because an error has occurred.")); - } - } + public void onClick(View view) { + doSomeWork(); } }); + } + + /* + * simple example using CompletableObserver + */ + private void doSomeWork() { + Completable completable = Completable.timer(1000, TimeUnit.MILLISECONDS); completable .subscribeOn(Schedulers.io()) @@ -42,5 +55,27 @@ public void subscribe(CompletableEmitter e) throws Exception { .subscribe(getCompletableObserver()); } + private CompletableObserver getCompletableObserver() { + return new CompletableObserver() { + @Override + public void onSubscribe(Disposable d) { + Log.d(TAG, " onSubscribe : " + d.isDisposed()); + } + + @Override + public void onComplete() { + textView.append(" onComplete"); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " onComplete"); + } + + @Override + public void onError(Throwable e) { + textView.append(" onError : " + e.getMessage()); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " onError : " + e.getMessage()); + } + }; + } } \ No newline at end of file diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/ConcatExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/ConcatExampleActivity.java index 2899ef5..ce4a3f5 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/ConcatExampleActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/ConcatExampleActivity.java @@ -1,13 +1,42 @@ package com.rxjava2.android.samples.ui.operators; -import com.rxjava2.android.samples.ui.ExampleBaseActivity; +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.TextView; + +import com.rxjava2.android.samples.R; +import com.rxjava2.android.samples.utils.AppConstant; import io.reactivex.Observable; +import io.reactivex.Observer; +import io.reactivex.disposables.Disposable; /** * Created by amitshekhar on 27/08/16. */ -public class ConcatExampleActivity extends ExampleBaseActivity { +public class ConcatExampleActivity extends AppCompatActivity { + + private static final String TAG = ConcatExampleActivity.class.getSimpleName(); + Button btn; + TextView textView; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_example); + btn = (Button) findViewById(R.id.btn); + textView = (TextView) findViewById(R.id.textView); + + btn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + doSomeWork(); + } + }); + } /* * Using concat operator to combine Observable : concat maintain @@ -15,9 +44,9 @@ public class ConcatExampleActivity extends ExampleBaseActivity { * It will emit all the 7 values in order * here - first "A1", "A2", "A3", "A4" and then "B1", "B2", "B3" * first all from the first Observable and then - * all from the second Observable, all in order + * all from the second Observable all in order */ - protected void doSomeWork() { + private void doSomeWork() { final String[] aStrings = {"A1", "A2", "A3", "A4"}; final String[] bStrings = {"B1", "B2", "B3"}; @@ -29,4 +58,36 @@ protected void doSomeWork() { } + private Observer getObserver() { + return new Observer() { + + @Override + public void onSubscribe(Disposable d) { + Log.d(TAG, " onSubscribe : " + d.isDisposed()); + } + + @Override + public void onNext(String value) { + textView.append(" onNext : value : " + value); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " onNext : value : " + value); + } + + @Override + public void onError(Throwable e) { + textView.append(" onError : " + e.getMessage()); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " onError : " + e.getMessage()); + } + + @Override + public void onComplete() { + textView.append(" onComplete"); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " onComplete"); + } + }; + } + + } \ No newline at end of file diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/DebounceExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/DebounceExampleActivity.java index 64c7306..d0f9802 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/DebounceExampleActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/DebounceExampleActivity.java @@ -1,29 +1,55 @@ package com.rxjava2.android.samples.ui.operators; -import com.rxjava2.android.samples.ui.ExampleBaseActivity; +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.TextView; + +import com.rxjava2.android.samples.R; +import com.rxjava2.android.samples.utils.AppConstant; import java.util.concurrent.TimeUnit; import io.reactivex.Observable; import io.reactivex.ObservableEmitter; import io.reactivex.ObservableOnSubscribe; +import io.reactivex.Observer; import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.disposables.Disposable; import io.reactivex.schedulers.Schedulers; /** * Created by amitshekhar on 22/12/16. */ -public class DebounceExampleActivity extends ExampleBaseActivity { +public class DebounceExampleActivity extends AppCompatActivity { + + private static final String TAG = DebounceExampleActivity.class.getSimpleName(); + Button btn; + TextView textView; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_example); + btn = (Button) findViewById(R.id.btn); + textView = (TextView) findViewById(R.id.textView); + + btn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + doSomeWork(); + } + }); + } /* * Using debounce() -> only emit an item from an Observable if a particular time-span has * passed without it emitting another item, so it will emit 2, 4, 5 as we have simulated it. */ - protected void doSomeWork() { - - //debounce 是发射所有 时间片段 交集 中最后一个元素。 - //这里的时间片段是指每次发射元素的当前时刻+超时时间形成的时间片段 + private void doSomeWork() { getObservable() .debounce(500, TimeUnit.MILLISECONDS) // Run on a background thread @@ -49,20 +75,42 @@ public void subscribe(ObservableEmitter emitter) throws Exception { emitter.onNext(5); // deliver Thread.sleep(510); emitter.onComplete(); - - /* - 分析如下: - 1和2在400毫秒处有交集,所以1被扔掉。 - 2和3之间有500毫秒的间隔,没有交集,所以2被发射出去。 - 3在905毫秒出准备发射,但是紧接着4在1005毫秒处也要准备发射,所以3和4有交集,3被扔掉。 - 4和5之间有605毫秒的间隔,没有交集,所以4被发射出去。 - 5在接下来的500毫秒内没有和其他元素有交集,所以发射出去。 - (如还不明白,建议在纸上画出各个元素的时间片段) - s*/ - } }); } + private Observer getObserver() { + return new Observer() { + + @Override + public void onSubscribe(Disposable d) { + Log.d(TAG, " onSubscribe : " + d.isDisposed()); + } + + @Override + public void onNext(Integer value) { + textView.append(" onNext : "); + textView.append(AppConstant.LINE_SEPARATOR); + textView.append(" value : " + value); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " onNext "); + Log.d(TAG, " value : " + value); + } + + @Override + public void onError(Throwable e) { + textView.append(" onError : " + e.getMessage()); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " onError : " + e.getMessage()); + } + + @Override + public void onComplete() { + textView.append(" onComplete"); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " onComplete"); + } + }; + } } \ No newline at end of file diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/DeferExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/DeferExampleActivity.java index 2c86e4f..4aed8c6 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/DeferExampleActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/DeferExampleActivity.java @@ -1,26 +1,54 @@ package com.rxjava2.android.samples.ui.operators; +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.TextView; + +import com.rxjava2.android.samples.R; import com.rxjava2.android.samples.model.Car; -import com.rxjava2.android.samples.ui.ExampleBaseActivity; +import com.rxjava2.android.samples.utils.AppConstant; import io.reactivex.Observable; +import io.reactivex.Observer; +import io.reactivex.disposables.Disposable; /** * Created by amitshekhar on 30/08/16. */ -public class DeferExampleActivity extends ExampleBaseActivity { +public class DeferExampleActivity extends AppCompatActivity { + + private static final String TAG = DeferExampleActivity.class.getSimpleName(); + Button btn; + TextView textView; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_example); + btn = (Button) findViewById(R.id.btn); + textView = (TextView) findViewById(R.id.textView); + + btn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + doSomeWork(); + } + }); + } /* * Defer used for Deferring Observable code until subscription in RxJava */ - protected void doSomeWork() { + private void doSomeWork() { Car car = new Car(); Observable brandDeferObservable = car.brandDeferObservable(); - car.setBrand("BMW"); - // Even if we are setting the brand after creating Observable + car.setBrand("BMW"); // Even if we are setting the brand after creating Observable // we will get the brand as BMW. // If we had not used defer, we would have got null as the brand. @@ -28,5 +56,36 @@ protected void doSomeWork() { .subscribe(getObserver()); } + private Observer getObserver() { + return new Observer() { + + @Override + public void onSubscribe(Disposable d) { + Log.d(TAG, " onSubscribe : " + d.isDisposed()); + } + + @Override + public void onNext(String value) { + textView.append(" onNext : value : " + value); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " onNext : value : " + value); + } + + @Override + public void onError(Throwable e) { + textView.append(" onError : " + e.getMessage()); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " onError : " + e.getMessage()); + } + + @Override + public void onComplete() { + textView.append(" onComplete"); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " onComplete"); + } + }; + } + } \ No newline at end of file diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/DisposableExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/DisposableExampleActivity.java index 134d562..2dd124b 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/DisposableExampleActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/DisposableExampleActivity.java @@ -1,8 +1,15 @@ package com.rxjava2.android.samples.ui.operators; +import android.os.Bundle; import android.os.SystemClock; +import android.support.v7.app.AppCompatActivity; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.TextView; -import com.rxjava2.android.samples.ui.ExampleBaseActivity; +import com.rxjava2.android.samples.R; +import com.rxjava2.android.samples.utils.AppConstant; import java.util.concurrent.Callable; @@ -10,15 +17,34 @@ import io.reactivex.ObservableSource; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.CompositeDisposable; +import io.reactivex.observers.DisposableObserver; import io.reactivex.schedulers.Schedulers; /** * Created by amitshekhar on 27/08/16. */ -public class DisposableExampleActivity extends ExampleBaseActivity { +public class DisposableExampleActivity extends AppCompatActivity { + private static final String TAG = DisposableExampleActivity.class.getSimpleName(); + Button btn; + TextView textView; private final CompositeDisposable disposables = new CompositeDisposable(); + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_example); + btn = (Button) findViewById(R.id.btn); + textView = (TextView) findViewById(R.id.textView); + + btn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + doSomeWork(); + } + }); + } + @Override protected void onDestroy() { super.onDestroy(); @@ -29,13 +55,34 @@ protected void onDestroy() { * Example to understand how to use disposables. * disposables is cleared in onDestroy of this activity. */ - protected void doSomeWork() { + void doSomeWork() { disposables.add(sampleObservable() // Run on a background thread .subscribeOn(Schedulers.io()) // Be notified on the main thread .observeOn(AndroidSchedulers.mainThread()) - .subscribeWith(this.getDisposableObserver())); + .subscribeWith(new DisposableObserver() { + @Override + public void onComplete() { + textView.append(" onComplete"); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " onComplete"); + } + + @Override + public void onError(Throwable e) { + textView.append(" onError : " + e.getMessage()); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " onError : " + e.getMessage()); + } + + @Override + public void onNext(String value) { + textView.append(" onNext : value : " + value); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " onNext value : " + value); + } + })); } static Observable sampleObservable() { @@ -49,4 +96,3 @@ public ObservableSource call() throws Exception { }); } } - diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/DistinctExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/DistinctExampleActivity.java index 555685f..76665ec 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/DistinctExampleActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/DistinctExampleActivity.java @@ -1,20 +1,81 @@ package com.rxjava2.android.samples.ui.operators; -import com.rxjava2.android.samples.ui.ExampleBaseActivity; +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v7.app.AppCompatActivity; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.TextView; + +import com.rxjava2.android.samples.R; +import com.rxjava2.android.samples.utils.AppConstant; import io.reactivex.Observable; +import io.reactivex.Observer; +import io.reactivex.disposables.Disposable; /** * Created by techteam on 13/09/16. */ -public class DistinctExampleActivity extends ExampleBaseActivity { +public class DistinctExampleActivity extends AppCompatActivity { + + private static final String TAG = DistinctExampleActivity.class.getSimpleName(); + Button btn; + TextView textView; + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_example); + btn = (Button) findViewById(R.id.btn); + textView = (TextView) findViewById(R.id.textView); + + btn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + doSomeWork(); + } + }); + } + + + private void doSomeWork() { + + getObservable() + .distinct() + .subscribe(getObserver()); + } + + private Observable getObservable() { + return Observable.just(1, 2, 1, 1, 2, 3, 4, 6, 4); + } + + + private Observer getObserver() { + return new Observer() { + + @Override + public void onSubscribe(Disposable d) { + Log.d(TAG, " onSubscribe : " + d.isDisposed()); + } - protected void doSomeWork(){ - getObservable().distinct() .subscribe(getObserver()); - } + @Override + public void onNext(Integer value) { + textView.append(" onNext : value : " + value); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " onNext value : " + value); + } - private Observable getObservable() { - return Observable.just(1, 2, 1, 1, 2, 3, 4 ,6, 4); - } + @Override + public void onError(Throwable e) { + Log.d(TAG, " onError : " + e.getMessage()); + } -} + @Override + public void onComplete() { + Log.d(TAG, " onComplete"); + } + }; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/FilterExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/FilterExampleActivity.java index 6777e4e..e470182 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/FilterExampleActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/FilterExampleActivity.java @@ -1,20 +1,50 @@ package com.rxjava2.android.samples.ui.operators; -import com.rxjava2.android.samples.ui.ExampleBaseActivity; +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.TextView; + +import com.rxjava2.android.samples.R; +import com.rxjava2.android.samples.utils.AppConstant; import io.reactivex.Observable; +import io.reactivex.Observer; +import io.reactivex.disposables.Disposable; import io.reactivex.functions.Predicate; + /** * Created by amitshekhar on 27/08/16. */ -public class FilterExampleActivity extends ExampleBaseActivity { +public class FilterExampleActivity extends AppCompatActivity { + + private static final String TAG = FilterExampleActivity.class.getSimpleName(); + Button btn; + TextView textView; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_example); + btn = (Button) findViewById(R.id.btn); + textView = (TextView) findViewById(R.id.textView); + + btn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + doSomeWork(); + } + }); + } /* * simple example by using filter operator to emit only even value * */ - protected void doSomeWork() { + private void doSomeWork() { Observable.just(1, 2, 3, 4, 5, 6) .filter(new Predicate() { @Override @@ -25,4 +55,40 @@ public boolean test(Integer integer) throws Exception { .subscribe(getObserver()); } + + private Observer getObserver() { + return new Observer() { + + @Override + public void onSubscribe(Disposable d) { + Log.d(TAG, " onSubscribe : " + d.isDisposed()); + } + + @Override + public void onNext(Integer value) { + textView.append(" onNext : "); + textView.append(AppConstant.LINE_SEPARATOR); + textView.append(" value : " + value); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " onNext "); + Log.d(TAG, " value : " + value); + } + + @Override + public void onError(Throwable e) { + textView.append(" onError : " + e.getMessage()); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " onError : " + e.getMessage()); + } + + @Override + public void onComplete() { + textView.append(" onComplete"); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " onComplete"); + } + }; + } + + } \ No newline at end of file diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/FlowableExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/FlowableExampleActivity.java index b80da45..7303cc2 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/FlowableExampleActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/FlowableExampleActivity.java @@ -1,70 +1,81 @@ package com.rxjava2.android.samples.ui.operators; -import com.rxjava2.android.samples.ui.ExampleBaseActivity; +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.TextView; -import org.reactivestreams.Subscriber; -import org.reactivestreams.Subscription; +import com.rxjava2.android.samples.R; +import com.rxjava2.android.samples.utils.AppConstant; import io.reactivex.Flowable; -import io.reactivex.android.schedulers.AndroidSchedulers; -import io.reactivex.schedulers.Schedulers; +import io.reactivex.SingleObserver; +import io.reactivex.disposables.Disposable; +import io.reactivex.functions.BiFunction; /** * Created by amitshekhar on 27/08/16. */ -public class FlowableExampleActivity extends ExampleBaseActivity { +public class FlowableExampleActivity extends AppCompatActivity { - private Subscription mSubscription; + private static final String TAG = FlowableExampleActivity.class.getSimpleName(); + Button btn; + TextView textView; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_example); + btn = (Button) findViewById(R.id.btn); + textView = (TextView) findViewById(R.id.textView); + + btn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + doSomeWork(); + } + }); + } /* * simple example using Flowable */ - protected void doSomeWork() { + private void doSomeWork() { - if (mSubscription != null) { - mSubscription.cancel(); - } + Flowable observable = Flowable.just(1, 2, 3, 4); - Flowable.range(0, 20) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribeWith(new Subscriber() { + observable.reduce(50, new BiFunction() { + @Override + public Integer apply(Integer t1, Integer t2) { + return t1 + t2; + } + }).subscribe(getObserver()); - //当订阅后,会首先调用这个方法,其实就相当于onStart(), - //传入的Subscription s参数可以用于请求数据或者取消订阅 - @Override - public void onSubscribe(Subscription s) { - FlowableExampleActivity.this.onSubscribe("", null); - mSubscription = s; - //要说明一下,request这个方法若不调用,下游的onNext与OnComplete都不会调用; - // 若你写的数量小于真实数据量,只会传你的个数,而且不会调用onComplete方法(毕竟没有传完嘛,当然没有complete) - mSubscription.request(1); - } - - @Override - public void onNext(Integer o) { - FlowableExampleActivity.this.onNext("", o); - mSubscription.request(1); - } + } - @Override - public void onError(Throwable t) { - FlowableExampleActivity.this.onError("", t); - } + private SingleObserver getObserver() { - @Override - public void onComplete() { - FlowableExampleActivity.this.onComplete(""); - } - }); + return new SingleObserver() { + @Override + public void onSubscribe(Disposable d) { + Log.d(TAG, " onSubscribe : " + d.isDisposed()); + } - } + @Override + public void onSuccess(Integer value) { + textView.append(" onSuccess : value : " + value); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " onSuccess : value : " + value); + } - @Override - protected void onDestroy() { - if (mSubscription != null) { - mSubscription.cancel(); - } - super.onDestroy(); + @Override + public void onError(Throwable e) { + textView.append(" onError : " + e.getMessage()); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " onError : " + e.getMessage()); + } + }; } } \ No newline at end of file diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/IntervalExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/IntervalExampleActivity.java index b516456..22469be 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/IntervalExampleActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/IntervalExampleActivity.java @@ -1,21 +1,48 @@ package com.rxjava2.android.samples.ui.operators; -import com.rxjava2.android.samples.ui.ExampleBaseActivity; +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.TextView; + +import com.rxjava2.android.samples.R; +import com.rxjava2.android.samples.utils.AppConstant; import java.util.concurrent.TimeUnit; import io.reactivex.Observable; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.CompositeDisposable; +import io.reactivex.observers.DisposableObserver; import io.reactivex.schedulers.Schedulers; /** * Created by amitshekhar on 27/08/16. */ -public class IntervalExampleActivity extends ExampleBaseActivity { +public class IntervalExampleActivity extends AppCompatActivity { + private static final String TAG = IntervalExampleActivity.class.getSimpleName(); + Button btn; + TextView textView; private final CompositeDisposable disposables = new CompositeDisposable(); + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_example); + btn = (Button) findViewById(R.id.btn); + textView = (TextView) findViewById(R.id.textView); + + btn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + doSomeWork(); + } + }); + } + @Override protected void onDestroy() { super.onDestroy(); @@ -26,17 +53,44 @@ protected void onDestroy() { * simple example using interval to run task at an interval of 2 sec * which start immediately */ - protected void doSomeWork() { + private void doSomeWork() { disposables.add(getObservable() // Run on a background thread .subscribeOn(Schedulers.io()) // Be notified on the main thread .observeOn(AndroidSchedulers.mainThread()) - .subscribeWith(this.getDisposableObserver())); + .subscribeWith(getObserver())); } private Observable getObservable() { return Observable.interval(0, 2, TimeUnit.SECONDS); } + private DisposableObserver getObserver() { + return new DisposableObserver() { + + @Override + public void onNext(Long value) { + textView.append(" onNext : value : " + value); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " onNext : value : " + value); + } + + @Override + public void onError(Throwable e) { + textView.append(" onError : " + e.getMessage()); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " onError : " + e.getMessage()); + } + + @Override + public void onComplete() { + textView.append(" onComplete"); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " onComplete"); + } + }; + } + + } \ No newline at end of file diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/LastOperatorExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/LastOperatorExampleActivity.java index 2222afb..3b0282c 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/LastOperatorExampleActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/LastOperatorExampleActivity.java @@ -1,22 +1,76 @@ package com.rxjava2.android.samples.ui.operators; -import com.rxjava2.android.samples.ui.ExampleBaseActivity; +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v7.app.AppCompatActivity; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.TextView; + +import com.rxjava2.android.samples.R; +import com.rxjava2.android.samples.utils.AppConstant; import io.reactivex.Observable; +import io.reactivex.SingleObserver; +import io.reactivex.disposables.Disposable; /** * Created by techteam on 13/09/16. */ -public class LastOperatorExampleActivity extends ExampleBaseActivity { +public class LastOperatorExampleActivity extends AppCompatActivity { + + private static final String TAG = DistinctExampleActivity.class.getSimpleName(); + Button btn; + TextView textView; + + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_example); + btn = (Button) findViewById(R.id.btn); + textView = (TextView) findViewById(R.id.textView); + + btn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + doSomeWork(); + } + }); + } - protected void doSomeWork() { - getObservable() - .last("Default") // the default item ("Default") to emit if the source ObservableSource is empty - .subscribe(this.getSingleObserver()); + private void doSomeWork() { + getObservable().last("A1") // the default item ("A1") to emit if the source ObservableSource is empty + .subscribe(getObserver()); } private Observable getObservable() { return Observable.just("A1", "A2", "A3", "A4", "A5", "A6"); } + private SingleObserver getObserver() { + return new SingleObserver() { + + @Override + public void onSubscribe(Disposable d) { + Log.d(TAG, " onSubscribe : " + d.isDisposed()); + } + + @Override + public void onSuccess(String value) { + textView.append(" onNext : value : " + value); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " onNext value : " + value); + } + + + @Override + public void onError(Throwable e) { + textView.append(" onError : " + e.getMessage()); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " onError : " + e.getMessage()); + } + }; + } } diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/MapExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/MapExampleActivity.java index 3e4c2bc..0b50c1c 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/MapExampleActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/MapExampleActivity.java @@ -1,8 +1,16 @@ package com.rxjava2.android.samples.ui.operators; +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.TextView; + +import com.rxjava2.android.samples.R; import com.rxjava2.android.samples.model.ApiUser; import com.rxjava2.android.samples.model.User; -import com.rxjava2.android.samples.ui.ExampleBaseActivity; +import com.rxjava2.android.samples.utils.AppConstant; import com.rxjava2.android.samples.utils.Utils; import java.util.List; @@ -10,14 +18,35 @@ import io.reactivex.Observable; import io.reactivex.ObservableEmitter; import io.reactivex.ObservableOnSubscribe; +import io.reactivex.Observer; import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.disposables.Disposable; import io.reactivex.functions.Function; import io.reactivex.schedulers.Schedulers; /** * Created by amitshekhar on 27/08/16. */ -public class MapExampleActivity extends ExampleBaseActivity { +public class MapExampleActivity extends AppCompatActivity { + + private static final String TAG = MapExampleActivity.class.getSimpleName(); + Button btn; + TextView textView; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_example); + btn = (Button) findViewById(R.id.btn); + textView = (TextView) findViewById(R.id.textView); + + btn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + doSomeWork(); + } + }); + } /* * Here we are getting ApiUser Object from api server @@ -25,7 +54,7 @@ public class MapExampleActivity extends ExampleBaseActivity { * may be our database support User Not ApiUser Object * Here we are using Map Operator to do that */ - protected void doSomeWork() { + private void doSomeWork() { getObservable() // Run on a background thread .subscribeOn(Schedulers.io()) @@ -53,4 +82,40 @@ public void subscribe(ObservableEmitter> e) throws Exception { }); } + private Observer> getObserver() { + return new Observer>() { + + @Override + public void onSubscribe(Disposable d) { + Log.d(TAG, " onSubscribe : " + d.isDisposed()); + } + + @Override + public void onNext(List userList) { + textView.append(" onNext"); + textView.append(AppConstant.LINE_SEPARATOR); + for (User user : userList) { + textView.append(" firstName : " + user.firstName); + textView.append(AppConstant.LINE_SEPARATOR); + } + Log.d(TAG, " onNext : " + userList.size()); + } + + @Override + public void onError(Throwable e) { + textView.append(" onError : " + e.getMessage()); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " onError : " + e.getMessage()); + } + + @Override + public void onComplete() { + textView.append(" onComplete"); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " onComplete"); + } + }; + } + + } \ No newline at end of file diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/MergeExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/MergeExampleActivity.java index 0ef4fe2..0cd7487 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/MergeExampleActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/MergeExampleActivity.java @@ -1,20 +1,50 @@ package com.rxjava2.android.samples.ui.operators; -import com.rxjava2.android.samples.ui.ExampleBaseActivity; +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.TextView; + +import com.rxjava2.android.samples.R; +import com.rxjava2.android.samples.utils.AppConstant; import io.reactivex.Observable; +import io.reactivex.Observer; +import io.reactivex.disposables.Disposable; /** * Created by amitshekhar on 28/08/16. */ -public class MergeExampleActivity extends ExampleBaseActivity { +public class MergeExampleActivity extends AppCompatActivity { + + private static final String TAG = MergeExampleActivity.class.getSimpleName(); + Button btn; + TextView textView; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_example); + btn = (Button) findViewById(R.id.btn); + textView = (TextView) findViewById(R.id.textView); + + btn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + doSomeWork(); + } + }); + } + /* * Using merge operator to combine Observable : merge does not maintain * the order of Observable. * It will emit all the 7 values may not be in order * Ex - "A1", "B1", "A2", "A3", "A4", "B2", "B3" - may be anything */ - protected void doSomeWork() { + private void doSomeWork() { final String[] aStrings = {"A1", "A2", "A3", "A4"}; final String[] bStrings = {"B1", "B2", "B3"}; @@ -25,4 +55,37 @@ protected void doSomeWork() { .subscribe(getObserver()); } + + private Observer getObserver() { + return new Observer() { + + @Override + public void onSubscribe(Disposable d) { + Log.d(TAG, " onSubscribe : " + d.isDisposed()); + } + + @Override + public void onNext(String value) { + textView.append(" onNext : value : " + value); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " onNext : value : " + value); + } + + @Override + public void onError(Throwable e) { + textView.append(" onError : " + e.getMessage()); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " onError : " + e.getMessage()); + } + + @Override + public void onComplete() { + textView.append(" onComplete"); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " onComplete"); + } + }; + } + + } \ No newline at end of file diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/PublishSubjectExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/PublishSubjectExampleActivity.java index a7e31f6..af8822c 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/PublishSubjectExampleActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/PublishSubjectExampleActivity.java @@ -1,41 +1,131 @@ package com.rxjava2.android.samples.ui.operators; -import com.rxjava2.android.samples.ui.ExampleBaseActivity; +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.TextView; +import com.rxjava2.android.samples.R; +import com.rxjava2.android.samples.utils.AppConstant; + +import io.reactivex.Observer; +import io.reactivex.disposables.Disposable; import io.reactivex.subjects.PublishSubject; /** * Created by amitshekhar on 17/12/16. */ -public class PublishSubjectExampleActivity extends ExampleBaseActivity { +public class PublishSubjectExampleActivity extends AppCompatActivity { + + private static final String TAG = PublishSubjectExampleActivity.class.getSimpleName(); + Button btn; + TextView textView; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_example); + btn = (Button) findViewById(R.id.btn); + textView = (TextView) findViewById(R.id.textView); + + btn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + doSomeWork(); + } + }); + } /* PublishSubject emits to an observer only those items that are emitted - * by the source Observable, subsequent to the time of the subscription. - */ - protected void doSomeWork() { + * by the source Observable, subsequent to the time of the subscription. + */ + private void doSomeWork() { - //PublishSubject就像鼠标事件,不管有没有订阅者,他都按照他的设定发事件,什么时候有订阅者,那么订阅者就从那个时候获取事件。 - //与之相反的是ReplaySubject,不管订阅者什么时候订阅,都能获取完整事件。 PublishSubject source = PublishSubject.create(); - source.onNext(-1); - source.onNext(0); - source.subscribe(this.getObserver("First")); // it will get 1, 2, 3, 4 and onComplete + source.subscribe(getFirstObserver()); // it will get 1, 2, 3, 4 and onComplete source.onNext(1); source.onNext(2); source.onNext(3); - //source.onComplete();//如果在这里onComplete了,那么后面的订阅者只能收到onComplete事件 /* * it will emit 4 and onComplete for second observer also. */ - source.subscribe(this.getObserver("Second")); + source.subscribe(getSecondObserver()); source.onNext(4); source.onComplete(); } + + private Observer getFirstObserver() { + return new Observer() { + + @Override + public void onSubscribe(Disposable d) { + Log.d(TAG, " First onSubscribe : " + d.isDisposed()); + } + + @Override + public void onNext(Integer value) { + textView.append(" First onNext : value : " + value); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " First onNext value : " + value); + } + + @Override + public void onError(Throwable e) { + textView.append(" First onError : " + e.getMessage()); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " First onError : " + e.getMessage()); + } + + @Override + public void onComplete() { + textView.append(" First onComplete"); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " First onComplete"); + } + }; + } + + private Observer getSecondObserver() { + return new Observer() { + + @Override + public void onSubscribe(Disposable d) { + textView.append(" Second onSubscribe : isDisposed :" + d.isDisposed()); + Log.d(TAG, " Second onSubscribe : " + d.isDisposed()); + textView.append(AppConstant.LINE_SEPARATOR); + } + + @Override + public void onNext(Integer value) { + textView.append(" Second onNext : value : " + value); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " Second onNext value : " + value); + } + + @Override + public void onError(Throwable e) { + textView.append(" Second onError : " + e.getMessage()); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " Second onError : " + e.getMessage()); + } + + @Override + public void onComplete() { + textView.append(" Second onComplete"); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " Second onComplete"); + } + }; + } + + } \ No newline at end of file diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/ReduceExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/ReduceExampleActivity.java index 0722028..1ab9930 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/ReduceExampleActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/ReduceExampleActivity.java @@ -1,18 +1,48 @@ package com.rxjava2.android.samples.ui.operators; -import com.rxjava2.android.samples.ui.ExampleBaseActivity; +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.TextView; +import com.rxjava2.android.samples.R; +import com.rxjava2.android.samples.utils.AppConstant; + +import io.reactivex.MaybeObserver; import io.reactivex.Observable; +import io.reactivex.disposables.Disposable; import io.reactivex.functions.BiFunction; /** * Created by amitshekhar on 27/08/16. */ -public class ReduceExampleActivity extends ExampleBaseActivity { +public class ReduceExampleActivity extends AppCompatActivity { + + private static final String TAG = ReduceExampleActivity.class.getSimpleName(); + Button btn; + TextView textView; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_example); + btn = (Button) findViewById(R.id.btn); + textView = (TextView) findViewById(R.id.textView); + + btn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + doSomeWork(); + } + }); + } + /* * simple example using reduce to add all the number */ - protected void doSomeWork() { + private void doSomeWork() { getObservable() .reduce(new BiFunction() { @Override @@ -20,12 +50,42 @@ public Integer apply(Integer t1, Integer t2) { return t1 + t2; } }) - .subscribe(this.getMaybeObserver()); + .subscribe(getObserver()); } private Observable getObservable() { return Observable.just(1, 2, 3, 4); } + private MaybeObserver getObserver() { + return new MaybeObserver() { + @Override + public void onSubscribe(Disposable d) { + Log.d(TAG, " onSubscribe : " + d.isDisposed()); + } + + @Override + public void onSuccess(Integer value) { + textView.append(" onSuccess : value : " + value); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " onSuccess : value : " + value); + } + + @Override + public void onError(Throwable e) { + textView.append(" onError : " + e.getMessage()); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " onError : " + e.getMessage()); + } + + @Override + public void onComplete() { + textView.append(" onComplete"); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " onComplete"); + } + }; + } + } \ No newline at end of file diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/ReplayExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/ReplayExampleActivity.java index 72ed85c..8880ea9 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/ReplayExampleActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/ReplayExampleActivity.java @@ -1,27 +1,54 @@ package com.rxjava2.android.samples.ui.operators; -import com.rxjava2.android.samples.ui.ExampleBaseActivity; +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.TextView; +import com.rxjava2.android.samples.R; +import com.rxjava2.android.samples.utils.AppConstant; + +import io.reactivex.Observer; +import io.reactivex.disposables.Disposable; import io.reactivex.observables.ConnectableObservable; import io.reactivex.subjects.PublishSubject; /** * Created by amitshekhar on 27/08/16. */ -public class ReplayExampleActivity extends ExampleBaseActivity { +public class ReplayExampleActivity extends AppCompatActivity { + + private static final String TAG = ReplayExampleActivity.class.getSimpleName(); + Button btn; + TextView textView; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_example); + btn = (Button) findViewById(R.id.btn); + textView = (TextView) findViewById(R.id.textView); + + btn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + doSomeWork(); + } + }); + } /* Using replay operator, replay ensure that all observers see the same sequence * of emitted items, even if they subscribe after the Observable has begun emitting items */ - protected void doSomeWork() { + private void doSomeWork() { PublishSubject source = PublishSubject.create(); ConnectableObservable connectableObservable = source.replay(3); // bufferSize = 3 to retain 3 values to replay connectableObservable.connect(); // connecting the connectableObservable - source.onNext(-1); - source.onNext(0); - connectableObservable.subscribe(this.getObserver("First")); + connectableObservable.subscribe(getFirstObserver()); source.onNext(1); source.onNext(2); @@ -29,15 +56,74 @@ protected void doSomeWork() { source.onNext(4); source.onComplete(); - /* - * Replay操作符会给onComplete后订阅Observable的订阅者Replay发射最后几个元素。 - * 在onComplete之前订阅的不受影响(会收到完整的元素。哪怕在订阅之前已经开始onNext数据了) - * * it will emit 2, 3, 4 as (count = 3), retains the 3 values for replay */ - connectableObservable.subscribe(this.getObserver("Second")); + connectableObservable.subscribe(getSecondObserver()); + + } + + + private Observer getFirstObserver() { + return new Observer() { + + @Override + public void onSubscribe(Disposable d) { + Log.d(TAG, " First onSubscribe : " + d.isDisposed()); + } + + @Override + public void onNext(Integer value) { + textView.append(" First onNext : value : " + value); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " First onNext value : " + value); + } + + @Override + public void onError(Throwable e) { + textView.append(" First onError : " + e.getMessage()); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " First onError : " + e.getMessage()); + } + + @Override + public void onComplete() { + textView.append(" First onComplete"); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " First onComplete"); + } + }; + } + + private Observer getSecondObserver() { + return new Observer() { + + @Override + public void onSubscribe(Disposable d) { + textView.append(" Second onSubscribe : isDisposed :" + d.isDisposed()); + Log.d(TAG, " Second onSubscribe : " + d.isDisposed()); + textView.append(AppConstant.LINE_SEPARATOR); + } + + @Override + public void onNext(Integer value) { + textView.append(" Second onNext : value : " + value); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " Second onNext value : " + value); + } + + @Override + public void onError(Throwable e) { + textView.append(" Second onError : " + e.getMessage()); + Log.d(TAG, " Second onError : " + e.getMessage()); + } + @Override + public void onComplete() { + textView.append(" Second onComplete"); + Log.d(TAG, " Second onComplete"); + } + }; } diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/ReplaySubjectExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/ReplaySubjectExampleActivity.java index 7692494..7f09563 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/ReplaySubjectExampleActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/ReplaySubjectExampleActivity.java @@ -1,45 +1,129 @@ package com.rxjava2.android.samples.ui.operators; -import com.rxjava2.android.samples.ui.ExampleBaseActivity; +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.TextView; +import com.rxjava2.android.samples.R; +import com.rxjava2.android.samples.utils.AppConstant; + +import io.reactivex.Observer; +import io.reactivex.disposables.Disposable; import io.reactivex.subjects.ReplaySubject; /** * Created by amitshekhar on 17/12/16. */ -public class ReplaySubjectExampleActivity extends ExampleBaseActivity { +public class ReplaySubjectExampleActivity extends AppCompatActivity { + + private static final String TAG = ReplaySubjectExampleActivity.class.getSimpleName(); + Button btn; + TextView textView; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_example); + btn = (Button) findViewById(R.id.btn); + textView = (TextView) findViewById(R.id.textView); + + btn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + doSomeWork(); + } + }); + } /* ReplaySubject emits to any observer all of the items that were emitted * by the source Observable, regardless of when the observer subscribes. */ - protected void doSomeWork() { + private void doSomeWork() { - //ReplaySubject 和 PublishSubject相反, - //ReplaySubject不管订阅者什么时候订阅都能获取到完整的发射数据。 - //而PublishSubject会一直按照自己的步调发射数据,你在哪订阅就从这个时间点开始才能获取到事件 - //所谓的完整数据指的是从第一个onNext 一直到 onComplete 或 onError ReplaySubject source = ReplaySubject.create(); - - source.onNext(-1); - source.onNext(0); - - source.subscribe(this.getObserver("First")); // it will get -1, 0, 1, 2, 3, 4, 5 + source.subscribe(getFirstObserver()); // it will get 1, 2, 3, 4 source.onNext(1); source.onNext(2); source.onNext(3); source.onNext(4); + source.onComplete(); /* - * it will emit -1, 0, 1, 2, 3, 4, 5 for second observer also as we have used replay + * it will emit 1, 2, 3, 4 for second observer also as we have used replay */ - source.subscribe(this.getObserver("Second")); + source.subscribe(getSecondObserver()); - source.onNext(5); - source.onComplete(); + } + + + private Observer getFirstObserver() { + return new Observer() { + + @Override + public void onSubscribe(Disposable d) { + Log.d(TAG, " First onSubscribe : " + d.isDisposed()); + } + + @Override + public void onNext(Integer value) { + textView.append(" First onNext : value : " + value); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " First onNext value : " + value); + } + + @Override + public void onError(Throwable e) { + textView.append(" First onError : " + e.getMessage()); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " First onError : " + e.getMessage()); + } + + @Override + public void onComplete() { + textView.append(" First onComplete"); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " First onComplete"); + } + }; + } + + private Observer getSecondObserver() { + return new Observer() { + + @Override + public void onSubscribe(Disposable d) { + textView.append(" Second onSubscribe : isDisposed :" + d.isDisposed()); + Log.d(TAG, " Second onSubscribe : " + d.isDisposed()); + textView.append(AppConstant.LINE_SEPARATOR); + } + + @Override + public void onNext(Integer value) { + textView.append(" Second onNext : value : " + value); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " Second onNext value : " + value); + } + + @Override + public void onError(Throwable e) { + textView.append(" Second onError : " + e.getMessage()); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " Second onError : " + e.getMessage()); + } + @Override + public void onComplete() { + textView.append(" Second onComplete"); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " Second onComplete"); + } + }; } diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/ScanExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/ScanExampleActivity.java index 100bcd6..f70e667 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/ScanExampleActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/ScanExampleActivity.java @@ -1,18 +1,45 @@ package com.rxjava2.android.samples.ui.operators; -import com.rxjava2.android.samples.ui.ExampleBaseActivity; +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.TextView; + +import com.rxjava2.android.samples.R; +import com.rxjava2.android.samples.utils.AppConstant; import io.reactivex.Observable; +import io.reactivex.Observer; import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.disposables.Disposable; import io.reactivex.functions.BiFunction; import io.reactivex.schedulers.Schedulers; -public class ScanExampleActivity extends ExampleBaseActivity { +public class ScanExampleActivity extends AppCompatActivity { + + private static final String TAG = ScanExampleActivity.class.getSimpleName(); + Button btn; + TextView textView; - /* Using scan operator, apply a function to each item emitted by an Observable, - * sequentially, and emit each successive value - */ - protected void doSomeWork() { + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_example); + btn = (Button) findViewById(R.id.btn); + textView = (TextView) findViewById(R.id.textView); + + btn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + doSomeWork(); + } + }); + } + + /* Using scan operator, it sends also the previous result */ + private void doSomeWork() { getObservable() // Run on a background thread .subscribeOn(Schedulers.io()) @@ -25,11 +52,42 @@ public Integer apply(Integer int1, Integer int2) throws Exception { } }) .subscribe(getObserver()); - //Scan又叫累加器。将原始第一个与第二个应用函数的值作为第二个发射出去数据(第一个发射的数据就是原始第一个数据) - //第三个发射的数据是原始第三个与第二个发射出去的应用函数后的值。 } private Observable getObservable() { return Observable.just(1, 2, 3, 4, 5); } + + private Observer getObserver() { + return new Observer() { + + @Override + public void onSubscribe(Disposable d) { + Log.d(TAG, " onSubscribe : " + d.isDisposed()); + } + + @Override + public void onNext(Integer value) { + textView.append(" onNext : value : " + value); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " onNext value : " + value); + } + + @Override + public void onError(Throwable e) { + textView.append(" onError : " + e.getMessage()); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " onError : " + e.getMessage()); + } + + @Override + public void onComplete() { + textView.append(" onComplete"); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " onComplete"); + } + }; + } + + } \ No newline at end of file diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/SimpleExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/SimpleExampleActivity.java index 694c858..423047d 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/SimpleExampleActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/SimpleExampleActivity.java @@ -1,20 +1,49 @@ package com.rxjava2.android.samples.ui.operators; -import com.rxjava2.android.samples.ui.ExampleBaseActivity; +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.TextView; + +import com.rxjava2.android.samples.R; +import com.rxjava2.android.samples.utils.AppConstant; import io.reactivex.Observable; +import io.reactivex.Observer; import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.disposables.Disposable; import io.reactivex.schedulers.Schedulers; /** * Created by amitshekhar on 27/08/16. */ -public class SimpleExampleActivity extends ExampleBaseActivity { +public class SimpleExampleActivity extends AppCompatActivity { + + private static final String TAG = SimpleExampleActivity.class.getSimpleName(); + Button btn; + TextView textView; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_example); + btn = (Button) findViewById(R.id.btn); + textView = (TextView) findViewById(R.id.textView); + + btn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + doSomeWork(); + } + }); + } /* * simple example to emit two value one by one */ - protected void doSomeWork() { + private void doSomeWork() { getObservable() // Run on a background thread .subscribeOn(Schedulers.io()) @@ -27,5 +56,36 @@ private Observable getObservable() { return Observable.just("Cricket", "Football"); } + private Observer getObserver() { + return new Observer() { + + @Override + public void onSubscribe(Disposable d) { + Log.d(TAG, " onSubscribe : " + d.isDisposed()); + } + + @Override + public void onNext(String value) { + textView.append(" onNext : value : " + value); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " onNext : value : " + value); + } + + @Override + public void onError(Throwable e) { + textView.append(" onError : " + e.getMessage()); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " onError : " + e.getMessage()); + } + + @Override + public void onComplete() { + textView.append(" onComplete"); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " onComplete"); + } + }; + } + } \ No newline at end of file diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/SingleObserverExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/SingleObserverExampleActivity.java index 5155e05..6c9ce7c 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/SingleObserverExampleActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/SingleObserverExampleActivity.java @@ -1,47 +1,72 @@ package com.rxjava2.android.samples.ui.operators; +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.TextView; -import com.rxjava2.android.samples.ui.ExampleBaseActivity; +import com.rxjava2.android.samples.R; +import com.rxjava2.android.samples.utils.AppConstant; import io.reactivex.Single; -import io.reactivex.SingleEmitter; -import io.reactivex.SingleOnSubscribe; -import io.reactivex.functions.Consumer; -import io.reactivex.functions.Function; +import io.reactivex.SingleObserver; +import io.reactivex.disposables.Disposable; /** * Created by amitshekhar on 27/08/16. */ -public class SingleObserverExampleActivity extends ExampleBaseActivity { +public class SingleObserverExampleActivity extends AppCompatActivity { + + private static final String TAG = SingleObserverExampleActivity.class.getSimpleName(); + Button btn; + TextView textView; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_example); + btn = (Button) findViewById(R.id.btn); + textView = (TextView) findViewById(R.id.textView); + + btn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + doSomeWork(); + } + }); + } /* * simple example using SingleObserver */ - protected void doSomeWork() { - Single.create(new SingleOnSubscribe() { - @Override - public void subscribe(SingleEmitter e) throws Exception { - if (!e.isDisposed()) { - e.onSuccess("Hello Success!"); - } - } - }).doOnSuccess(new Consumer() { + private void doSomeWork() { + Single.just("Amit") + .subscribe(getSingleObserver()); + } + + private SingleObserver getSingleObserver() { + return new SingleObserver() { @Override - public void accept(String s) throws Exception { - Log.d(TAG, "doOnSuccess: " + s); + public void onSubscribe(Disposable d) { + Log.d(TAG, " onSubscribe : " + d.isDisposed()); } - }).doOnError(new Consumer() { + @Override - public void accept(Throwable throwable) throws Exception { - Log.e(TAG, "doOnError: " + throwable.getMessage()); + public void onSuccess(String value) { + textView.append(" onNext : value : " + value); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " onNext value : " + value); } - }).onErrorReturn(new Function() { + @Override - public String apply(Throwable throwable) throws Exception { - return "Exception message: " + throwable.getMessage(); + public void onError(Throwable e) { + textView.append(" onError : " + e.getMessage()); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " onError : " + e.getMessage()); } - }).subscribe(getSingleObserver()); + }; } } \ No newline at end of file diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/SkipExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/SkipExampleActivity.java index de1cf11..301de52 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/SkipExampleActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/SkipExampleActivity.java @@ -1,20 +1,49 @@ package com.rxjava2.android.samples.ui.operators; -import com.rxjava2.android.samples.ui.ExampleBaseActivity; +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.TextView; + +import com.rxjava2.android.samples.R; +import com.rxjava2.android.samples.utils.AppConstant; import io.reactivex.Observable; +import io.reactivex.Observer; import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.disposables.Disposable; import io.reactivex.schedulers.Schedulers; /** * Created by amitshekhar on 27/08/16. */ -public class SkipExampleActivity extends ExampleBaseActivity { +public class SkipExampleActivity extends AppCompatActivity { + + private static final String TAG = SkipExampleActivity.class.getSimpleName(); + Button btn; + TextView textView; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_example); + btn = (Button) findViewById(R.id.btn); + textView = (TextView) findViewById(R.id.textView); + + btn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + doSomeWork(); + } + }); + } /* Using skip operator, it only not emit * the first 2 values. */ - protected void doSomeWork() { + private void doSomeWork() { getObservable() // Run on a background thread .subscribeOn(Schedulers.io()) @@ -28,4 +57,36 @@ private Observable getObservable() { return Observable.just(1, 2, 3, 4, 5); } + private Observer getObserver() { + return new Observer() { + + @Override + public void onSubscribe(Disposable d) { + Log.d(TAG, " onSubscribe : " + d.isDisposed()); + } + + @Override + public void onNext(Integer value) { + textView.append(" onNext : value : " + value); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " onNext value : " + value); + } + + @Override + public void onError(Throwable e) { + textView.append(" onError : " + e.getMessage()); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " onError : " + e.getMessage()); + } + + @Override + public void onComplete() { + textView.append(" onComplete"); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " onComplete"); + } + }; + } + + } \ No newline at end of file diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/TakeExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/TakeExampleActivity.java index 651b2c2..ae71924 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/TakeExampleActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/TakeExampleActivity.java @@ -1,21 +1,49 @@ package com.rxjava2.android.samples.ui.operators; -import com.rxjava2.android.samples.ui.ExampleBaseActivity; +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.TextView; + +import com.rxjava2.android.samples.R; +import com.rxjava2.android.samples.utils.AppConstant; import io.reactivex.Observable; +import io.reactivex.Observer; import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.disposables.Disposable; import io.reactivex.schedulers.Schedulers; /** * Created by amitshekhar on 27/08/16. */ -public class TakeExampleActivity extends ExampleBaseActivity { +public class TakeExampleActivity extends AppCompatActivity { + + private static final String TAG = TakeExampleActivity.class.getSimpleName(); + Button btn; + TextView textView; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_example); + btn = (Button) findViewById(R.id.btn); + textView = (TextView) findViewById(R.id.textView); - /* - * Using take operator, it only emits + btn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + doSomeWork(); + } + }); + } + + /* Using take operator, it only emits * required number of values. here only 3 out of 5 */ - protected void doSomeWork() { + private void doSomeWork() { getObservable() // Run on a background thread .subscribeOn(Schedulers.io()) @@ -29,4 +57,36 @@ private Observable getObservable() { return Observable.just(1, 2, 3, 4, 5); } + private Observer getObserver() { + return new Observer() { + + @Override + public void onSubscribe(Disposable d) { + Log.d(TAG, " onSubscribe : " + d.isDisposed()); + } + + @Override + public void onNext(Integer value) { + textView.append(" onNext : value : " + value); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " onNext value : " + value); + } + + @Override + public void onError(Throwable e) { + textView.append(" onError : " + e.getMessage()); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " onError : " + e.getMessage()); + } + + @Override + public void onComplete() { + textView.append(" onComplete"); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " onComplete"); + } + }; + } + + } \ No newline at end of file diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/ThrottleFirstExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/ThrottleFirstExampleActivity.java index 1872a64..28c6ae7 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/ThrottleFirstExampleActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/ThrottleFirstExampleActivity.java @@ -1,13 +1,23 @@ package com.rxjava2.android.samples.ui.operators; -import com.rxjava2.android.samples.ui.ExampleBaseActivity; +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.TextView; + +import com.rxjava2.android.samples.R; +import com.rxjava2.android.samples.utils.AppConstant; import java.util.concurrent.TimeUnit; import io.reactivex.Observable; import io.reactivex.ObservableEmitter; import io.reactivex.ObservableOnSubscribe; +import io.reactivex.Observer; import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.disposables.Disposable; import io.reactivex.schedulers.Schedulers; @@ -15,9 +25,33 @@ * Created by threshold on 2017/1/11. */ -public class ThrottleFirstExampleActivity extends ExampleBaseActivity { +public class ThrottleFirstExampleActivity extends AppCompatActivity { + + private static final String TAG = ThrottleFirstExampleActivity.class.getSimpleName(); + Button btn; + TextView textView; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_example); + btn = (Button) findViewById(R.id.btn); + textView = (TextView) findViewById(R.id.textView); - protected void doSomeWork() { + btn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + doSomeWork(); + } + }); + } + + /* + * Using throttleFirst() -> if the source Observable has emitted no items since + * the last time it was sampled, the Observable that results from this operator + * will emit no item for that sampling period. + */ + private void doSomeWork() { getObservable() .throttleFirst(500, TimeUnit.MILLISECONDS) // Run on a background thread @@ -46,13 +80,42 @@ public void subscribe(ObservableEmitter emitter) throws Exception { emitter.onNext(7); // deliver Thread.sleep(510); emitter.onComplete(); - /* - 0----------500-------------1000----------1500 - 0------------505--604--704--1009----------1519 - 1,2-----------3----4---5,6----7-----------Complete - */ } }); } -} + private Observer getObserver() { + return new Observer() { + + @Override + public void onSubscribe(Disposable d) { + Log.d(TAG, " onSubscribe : " + d.isDisposed()); + } + + @Override + public void onNext(Integer value) { + textView.append(" onNext : "); + textView.append(AppConstant.LINE_SEPARATOR); + textView.append(" value : " + value); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " onNext "); + Log.d(TAG, " value : " + value); + } + + @Override + public void onError(Throwable e) { + textView.append(" onError : " + e.getMessage()); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " onError : " + e.getMessage()); + } + + @Override + public void onComplete() { + textView.append(" onComplete"); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " onComplete"); + } + }; + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/ThrottleLastExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/ThrottleLastExampleActivity.java index e2689b3..ff52082 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/ThrottleLastExampleActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/ThrottleLastExampleActivity.java @@ -1,29 +1,58 @@ package com.rxjava2.android.samples.ui.operators; -import com.rxjava2.android.samples.ui.ExampleBaseActivity; +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.TextView; + +import com.rxjava2.android.samples.R; +import com.rxjava2.android.samples.utils.AppConstant; import java.util.concurrent.TimeUnit; import io.reactivex.Observable; import io.reactivex.ObservableEmitter; import io.reactivex.ObservableOnSubscribe; +import io.reactivex.Observer; import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.disposables.Disposable; import io.reactivex.schedulers.Schedulers; /** * Created by amitshekhar on 22/12/16. */ -public class ThrottleLastExampleActivity extends ExampleBaseActivity { +public class ThrottleLastExampleActivity extends AppCompatActivity { + + private static final String TAG = ThrottleLastExampleActivity.class.getSimpleName(); + Button btn; + TextView textView; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_example); + btn = (Button) findViewById(R.id.btn); + textView = (TextView) findViewById(R.id.textView); + + btn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + doSomeWork(); + } + }); + } /* * Using throttleLast() -> emit the most recent items emitted by an Observable within * periodic time intervals, so here it will emit 2, 6 and 7 as we have simulated it to be the * last the element in the interval of 500 millis */ - protected void doSomeWork() { + private void doSomeWork() { getObservable() - .throttleLast(500, TimeUnit.MILLISECONDS) + .throttleFirst(500, TimeUnit.MILLISECONDS) // Run on a background thread .subscribeOn(Schedulers.io()) // Be notified on the main thread @@ -50,13 +79,42 @@ public void subscribe(ObservableEmitter emitter) throws Exception { emitter.onNext(7); // deliver Thread.sleep(510); emitter.onComplete(); - /* - 0----------500-------------1000----------1500 - 0------------505--604--704--1009----------1519 - 1,2-----------3----4---5,6----7-----------Complete - */ } }); } + private Observer getObserver() { + return new Observer() { + + @Override + public void onSubscribe(Disposable d) { + Log.d(TAG, " onSubscribe : " + d.isDisposed()); + } + + @Override + public void onNext(Integer value) { + textView.append(" onNext : "); + textView.append(AppConstant.LINE_SEPARATOR); + textView.append(" value : " + value); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " onNext "); + Log.d(TAG, " value : " + value); + } + + @Override + public void onError(Throwable e) { + textView.append(" onError : " + e.getMessage()); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " onError : " + e.getMessage()); + } + + @Override + public void onComplete() { + textView.append(" onComplete"); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " onComplete"); + } + }; + } + } \ No newline at end of file diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/TimerExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/TimerExampleActivity.java index 13a3b51..17f6369 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/TimerExampleActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/TimerExampleActivity.java @@ -1,22 +1,51 @@ package com.rxjava2.android.samples.ui.operators; -import com.rxjava2.android.samples.ui.ExampleBaseActivity; +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.TextView; + +import com.rxjava2.android.samples.R; +import com.rxjava2.android.samples.utils.AppConstant; import java.util.concurrent.TimeUnit; import io.reactivex.Observable; +import io.reactivex.Observer; import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.disposables.Disposable; import io.reactivex.schedulers.Schedulers; /** * Created by amitshekhar on 27/08/16. */ -public class TimerExampleActivity extends ExampleBaseActivity { +public class TimerExampleActivity extends AppCompatActivity { + + private static final String TAG = TimerExampleActivity.class.getSimpleName(); + Button btn; + TextView textView; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_example); + btn = (Button) findViewById(R.id.btn); + textView = (TextView) findViewById(R.id.textView); + + btn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + doSomeWork(); + } + }); + } /* * simple example using timer to do something after 2 second */ - protected void doSomeWork() { + private void doSomeWork() { getObservable() // Run on a background thread .subscribeOn(Schedulers.io()) @@ -26,8 +55,39 @@ protected void doSomeWork() { } private Observable getObservable() { - //延迟2秒后发射一个0. - // timer就是定时器,到点后仅发射一个0 return Observable.timer(2, TimeUnit.SECONDS); } + + private Observer getObserver() { + return new Observer() { + + @Override + public void onSubscribe(Disposable d) { + Log.d(TAG, " onSubscribe : " + d.isDisposed()); + } + + @Override + public void onNext(Long value) { + textView.append(" onNext : value : " + value); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " onNext : value : " + value); + } + + @Override + public void onError(Throwable e) { + textView.append(" onError : " + e.getMessage()); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " onError : " + e.getMessage()); + } + + @Override + public void onComplete() { + textView.append(" onComplete"); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " onComplete"); + } + }; + } + + } \ No newline at end of file diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/WindowExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/WindowExampleActivity.java index aced36b..672d3ce 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/WindowExampleActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/WindowExampleActivity.java @@ -1 +1 @@ -package com.rxjava2.android.samples.ui.operators; import android.util.Log; import com.rxjava2.android.samples.ui.ExampleBaseActivity; import com.rxjava2.android.samples.utils.AppConstant; import java.util.concurrent.TimeUnit; import io.reactivex.Observable; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.functions.Consumer; import io.reactivex.schedulers.Schedulers; public class WindowExampleActivity extends ExampleBaseActivity { /* * Example using window operator -> It periodically * subdivide items from an Observable into * Observable windows and emit these windows rather than * emitting the items one at a time */ protected void doSomeWork() { Observable.interval(1, TimeUnit.SECONDS).take(12) .window(3, TimeUnit.SECONDS) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Consumer>() { @Override public void accept(Observable observable) { Log.d(TAG, "Sub Divide begin...."); textView.append("Sub Divide begin ...."); textView.append(AppConstant.LINE_SEPARATOR); observable .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Consumer() { @Override public void accept(Long value) { Log.d(TAG, "Next:" + value); textView.append("Next:" + value); textView.append(AppConstant.LINE_SEPARATOR); } }); } }); } } \ No newline at end of file +package com.rxjava2.android.samples.ui.operators; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.TextView; import com.rxjava2.android.samples.R; import com.rxjava2.android.samples.utils.AppConstant; import java.util.concurrent.TimeUnit; import io.reactivex.Observable; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.functions.Consumer; import io.reactivex.schedulers.Schedulers; public class WindowExampleActivity extends AppCompatActivity { private static final String TAG = WindowExampleActivity.class.getSimpleName(); Button btn; TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_example); btn = (Button) findViewById(R.id.btn); textView = (TextView) findViewById(R.id.textView); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { doSomeWork(); } }); } /* * Example using window operator -> It periodically * subdivide items from an Observable into * Observable windows and emit these windows rather than * emitting the items one at a time */ protected void doSomeWork() { Observable.interval(1, TimeUnit.SECONDS).take(12) .window(3, TimeUnit.SECONDS) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(getConsumer()); } public Consumer> getConsumer() { return new Consumer>() { @Override public void accept(Observable observable) throws Exception { Log.d(TAG, "Sub Divide begin...."); textView.append("Sub Divide begin ...."); textView.append(AppConstant.LINE_SEPARATOR); observable .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Consumer() { @Override public void accept(Long value) { Log.d(TAG, "Next:" + value); textView.append("Next:" + value); textView.append(AppConstant.LINE_SEPARATOR); } }); } }; } } \ No newline at end of file diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/ZipExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/ZipExampleActivity.java index 5aa860a..fa91c1e 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/ZipExampleActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/ZipExampleActivity.java @@ -1,7 +1,15 @@ package com.rxjava2.android.samples.ui.operators; +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.TextView; + +import com.rxjava2.android.samples.R; import com.rxjava2.android.samples.model.User; -import com.rxjava2.android.samples.ui.ExampleBaseActivity; +import com.rxjava2.android.samples.utils.AppConstant; import com.rxjava2.android.samples.utils.Utils; import java.util.List; @@ -9,21 +17,43 @@ import io.reactivex.Observable; import io.reactivex.ObservableEmitter; import io.reactivex.ObservableOnSubscribe; +import io.reactivex.Observer; import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.disposables.Disposable; import io.reactivex.functions.BiFunction; import io.reactivex.schedulers.Schedulers; /** * Created by amitshekhar on 27/08/16. */ -public class ZipExampleActivity extends ExampleBaseActivity { +public class ZipExampleActivity extends AppCompatActivity { + + private static final String TAG = ZipExampleActivity.class.getSimpleName(); + Button btn; + TextView textView; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_example); + btn = (Button) findViewById(R.id.btn); + textView = (TextView) findViewById(R.id.textView); + + btn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + doSomeWork(); + } + }); + } + /* * Here we are getting two user list * One, the list of cricket fans * Another one, the list of football fans * Then we are finding the list of users who loves both */ - protected void doSomeWork() { + private void doSomeWork() { Observable.zip(getCricketFansObservable(), getFootballFansObservable(), new BiFunction, List, List>() { @Override @@ -62,4 +92,40 @@ public void subscribe(ObservableEmitter> e) throws Exception { }); } + private Observer> getObserver() { + return new Observer>() { + + @Override + public void onSubscribe(Disposable d) { + Log.d(TAG, " onSubscribe : " + d.isDisposed()); + } + + @Override + public void onNext(List userList) { + textView.append(" onNext"); + textView.append(AppConstant.LINE_SEPARATOR); + for (User user : userList) { + textView.append(" firstName : " + user.firstName); + textView.append(AppConstant.LINE_SEPARATOR); + } + Log.d(TAG, " onNext : " + userList.size()); + } + + @Override + public void onError(Throwable e) { + textView.append(" onError : " + e.getMessage()); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " onError : " + e.getMessage()); + } + + @Override + public void onComplete() { + textView.append(" onComplete"); + textView.append(AppConstant.LINE_SEPARATOR); + Log.d(TAG, " onComplete"); + } + }; + } + + } \ No newline at end of file From 73ea4458ed49b1bf0a00312bafb1c885ca9d4dd8 Mon Sep 17 00:00:00 2001 From: AMIT SHEKHAR Date: Fri, 3 Feb 2017 20:09:04 +0530 Subject: [PATCH 05/94] Update README.md --- README.md | 3 +++ app/build.gradle | 6 ++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index cd64da2..c382f64 100644 --- a/README.md +++ b/README.md @@ -99,6 +99,9 @@ RxJava1 -> RxJava2 ### Find this project useful ? :heart: * Support it by clicking the :star: button on the upper right of this page. :v: +### Check out an awesome MVP architecture based project which uses RxJava2, Dagger2. +* [Android-MVP-Architecture](https://github.com/MindorksOpenSource/android-mvp-architecture) + ### Check out an awesome library for fast and simple networking in Android. * [Fast Android Networking Library](https://github.com/amitshekhariitbhu/Fast-Android-Networking) diff --git a/app/build.gradle b/app/build.gradle index c3c8d89..8e8ceee 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -23,8 +23,6 @@ dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:25.1.0' - compile 'io.reactivex.rxjava2:rxjava:2.0.4' - compile('io.reactivex.rxjava2:rxandroid:2.0.1'){ - exclude group: 'io.reactivex.rxjava2', module: 'rxjava' - } + compile 'io.reactivex.rxjava2:rxjava:2.0.5' + compile 'io.reactivex.rxjava2:rxandroid:2.0.1' } From e977a8e3e7f9124fc21a513d8c6f280320ce4e60 Mon Sep 17 00:00:00 2001 From: AMIT SHEKHAR Date: Fri, 3 Feb 2017 20:09:16 +0530 Subject: [PATCH 06/94] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c382f64..9032b32 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ Users switching from 1.x to 2.x have to re-organize their imports, but carefully Add this in your build.gradle ```groovy -compile 'io.reactivex.rxjava2:rxjava:2.0.4' +compile 'io.reactivex.rxjava2:rxjava:2.0.5' ``` If you are using RxAndroid also, then add the following ```groovy From 64284c2e2d14c0d9a1d008952c357233794db3f1 Mon Sep 17 00:00:00 2001 From: AMIT SHEKHAR Date: Fri, 3 Feb 2017 20:30:15 +0530 Subject: [PATCH 07/94] Operator correction --- .../android/samples/ui/operators/SkipExampleActivity.java | 2 +- .../samples/ui/operators/ThrottleLastExampleActivity.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/SkipExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/SkipExampleActivity.java index 301de52..26706ea 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/SkipExampleActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/SkipExampleActivity.java @@ -40,7 +40,7 @@ public void onClick(View view) { }); } - /* Using skip operator, it only not emit + /* Using skip operator, it will not emit * the first 2 values. */ private void doSomeWork() { diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/ThrottleLastExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/ThrottleLastExampleActivity.java index ff52082..95b6a45 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/ThrottleLastExampleActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/ThrottleLastExampleActivity.java @@ -52,7 +52,7 @@ public void onClick(View view) { */ private void doSomeWork() { getObservable() - .throttleFirst(500, TimeUnit.MILLISECONDS) + .throttleLast(500, TimeUnit.MILLISECONDS) // Run on a background thread .subscribeOn(Schedulers.io()) // Be notified on the main thread From c295df1b22ce3cb59a9a107bb03c4d6fe34428d9 Mon Sep 17 00:00:00 2001 From: insomnia Date: Sat, 4 Feb 2017 13:13:54 +0800 Subject: [PATCH 08/94] fix title distinct to last in AndroidManifest.xml --- app/src/main/AndroidManifest.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 1542126..569dbf3 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -78,7 +78,7 @@ android:label="@string/distinct"/> + android:label="@string/last"/> From b29ee5ce4c44d441bfba03cfc2e6f7369b321973 Mon Sep 17 00:00:00 2001 From: AMIT SHEKHAR Date: Sat, 4 Feb 2017 11:42:15 +0530 Subject: [PATCH 09/94] Add Networking Activity --- app/src/main/AndroidManifest.xml | 78 ++++++++++--------- ...inActivity.java => OperatorsActivity.java} | 62 +++++++-------- .../android/samples/ui/SelectionActivity.java | 27 +++++++ .../ui/networking/NetworkingActivity.java | 10 +++ ...tivity_main.xml => activity_operators.xml} | 4 +- .../main/res/layout/activity_selection.xml | 33 ++++++++ app/src/main/res/values/strings.xml | 2 + 7 files changed, 148 insertions(+), 68 deletions(-) rename app/src/main/java/com/rxjava2/android/samples/ui/{MainActivity.java => OperatorsActivity.java} (62%) create mode 100644 app/src/main/java/com/rxjava2/android/samples/ui/SelectionActivity.java create mode 100644 app/src/main/java/com/rxjava2/android/samples/ui/networking/NetworkingActivity.java rename app/src/main/res/layout/{activity_main.xml => activity_operators.xml} (99%) create mode 100644 app/src/main/res/layout/activity_selection.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 569dbf3..eedc8f2 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,6 +1,6 @@ + package="com.rxjava2.android.samples"> - + - + - + + + + android:label="@string/simple" /> + android:label="@string/map" /> + android:label="@string/zip" /> + android:label="@string/disposable" /> + android:label="@string/take" /> + android:label="@string/timer" /> + android:label="@string/interval" /> + android:label="@string/SingleObserver" /> + android:label="@string/CompletableObserver" /> + android:label="@string/Flowable" /> + android:label="@string/reduce" /> + android:label="@string/buffer" /> + android:label="@string/filter" /> + android:label="@string/skip" /> + android:label="@string/scan" /> + android:label="@string/replay" /> + android:label="@string/concat" /> + android:label="@string/merge" /> + android:label="@string/defer" /> + android:label="@string/distinct" /> + android:label="@string/last" /> + android:label="@string/replay_subject" /> + android:label="@string/publish_subject" /> + android:label="@string/behavior_subject" /> + android:label="@string/async_subject" /> + android:label="@string/throttle_last" /> - - + android:label="@string/debounce" /> + + \ No newline at end of file diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/MainActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/OperatorsActivity.java similarity index 62% rename from app/src/main/java/com/rxjava2/android/samples/ui/MainActivity.java rename to app/src/main/java/com/rxjava2/android/samples/ui/OperatorsActivity.java index 00f7352..903fcc3 100644 --- a/app/src/main/java/com/rxjava2/android/samples/ui/MainActivity.java +++ b/app/src/main/java/com/rxjava2/android/samples/ui/OperatorsActivity.java @@ -36,128 +36,128 @@ import com.rxjava2.android.samples.ui.operators.WindowExampleActivity; import com.rxjava2.android.samples.ui.operators.ZipExampleActivity; -public class MainActivity extends AppCompatActivity { +public class OperatorsActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.activity_main); + setContentView(R.layout.activity_operators); } public void startSimpleActivity(View view) { - startActivity(new Intent(MainActivity.this, SimpleExampleActivity.class)); + startActivity(new Intent(OperatorsActivity.this, SimpleExampleActivity.class)); } public void startMapActivity(View view) { - startActivity(new Intent(MainActivity.this, MapExampleActivity.class)); + startActivity(new Intent(OperatorsActivity.this, MapExampleActivity.class)); } public void startZipActivity(View view) { - startActivity(new Intent(MainActivity.this, ZipExampleActivity.class)); + startActivity(new Intent(OperatorsActivity.this, ZipExampleActivity.class)); } public void startDisposableActivity(View view) { - startActivity(new Intent(MainActivity.this, DisposableExampleActivity.class)); + startActivity(new Intent(OperatorsActivity.this, DisposableExampleActivity.class)); } public void startTakeActivity(View view) { - startActivity(new Intent(MainActivity.this, TakeExampleActivity.class)); + startActivity(new Intent(OperatorsActivity.this, TakeExampleActivity.class)); } public void startTimerActivity(View view) { - startActivity(new Intent(MainActivity.this, TimerExampleActivity.class)); + startActivity(new Intent(OperatorsActivity.this, TimerExampleActivity.class)); } public void startIntervalActivity(View view) { - startActivity(new Intent(MainActivity.this, IntervalExampleActivity.class)); + startActivity(new Intent(OperatorsActivity.this, IntervalExampleActivity.class)); } public void startSingleObserverActivity(View view) { - startActivity(new Intent(MainActivity.this, SingleObserverExampleActivity.class)); + startActivity(new Intent(OperatorsActivity.this, SingleObserverExampleActivity.class)); } public void startCompletableObserverActivity(View view) { - startActivity(new Intent(MainActivity.this, CompletableObserverExampleActivity.class)); + startActivity(new Intent(OperatorsActivity.this, CompletableObserverExampleActivity.class)); } public void startFlowableActivity(View view) { - startActivity(new Intent(MainActivity.this, FlowableExampleActivity.class)); + startActivity(new Intent(OperatorsActivity.this, FlowableExampleActivity.class)); } public void startReduceActivity(View view) { - startActivity(new Intent(MainActivity.this, ReduceExampleActivity.class)); + startActivity(new Intent(OperatorsActivity.this, ReduceExampleActivity.class)); } public void startBufferActivity(View view) { - startActivity(new Intent(MainActivity.this, BufferExampleActivity.class)); + startActivity(new Intent(OperatorsActivity.this, BufferExampleActivity.class)); } public void startFilterActivity(View view) { - startActivity(new Intent(MainActivity.this, FilterExampleActivity.class)); + startActivity(new Intent(OperatorsActivity.this, FilterExampleActivity.class)); } public void startSkipActivity(View view) { - startActivity(new Intent(MainActivity.this, SkipExampleActivity.class)); + startActivity(new Intent(OperatorsActivity.this, SkipExampleActivity.class)); } public void startScanActivity(View view) { - startActivity(new Intent(MainActivity.this, ScanExampleActivity.class)); + startActivity(new Intent(OperatorsActivity.this, ScanExampleActivity.class)); } public void startReplayActivity(View view) { - startActivity(new Intent(MainActivity.this, ReplayExampleActivity.class)); + startActivity(new Intent(OperatorsActivity.this, ReplayExampleActivity.class)); } public void startConcatActivity(View view) { - startActivity(new Intent(MainActivity.this, ConcatExampleActivity.class)); + startActivity(new Intent(OperatorsActivity.this, ConcatExampleActivity.class)); } public void startMergeActivity(View view) { - startActivity(new Intent(MainActivity.this, MergeExampleActivity.class)); + startActivity(new Intent(OperatorsActivity.this, MergeExampleActivity.class)); } public void startDeferActivity(View view) { - startActivity(new Intent(MainActivity.this, DeferExampleActivity.class)); + startActivity(new Intent(OperatorsActivity.this, DeferExampleActivity.class)); } public void startDistinctActivity(View view) { - startActivity(new Intent(MainActivity.this, DistinctExampleActivity.class)); + startActivity(new Intent(OperatorsActivity.this, DistinctExampleActivity.class)); } public void startLastOperatorActivity(View view) { - startActivity(new Intent(MainActivity.this, LastOperatorExampleActivity.class)); + startActivity(new Intent(OperatorsActivity.this, LastOperatorExampleActivity.class)); } public void startReplaySubjectActivity(View view) { - startActivity(new Intent(MainActivity.this, ReplaySubjectExampleActivity.class)); + startActivity(new Intent(OperatorsActivity.this, ReplaySubjectExampleActivity.class)); } public void startPublishSubjectActivity(View view) { - startActivity(new Intent(MainActivity.this, PublishSubjectExampleActivity.class)); + startActivity(new Intent(OperatorsActivity.this, PublishSubjectExampleActivity.class)); } public void startBehaviorSubjectActivity(View view) { - startActivity(new Intent(MainActivity.this, BehaviorSubjectExampleActivity.class)); + startActivity(new Intent(OperatorsActivity.this, BehaviorSubjectExampleActivity.class)); } public void startAsyncSubjectActivity(View view) { - startActivity(new Intent(MainActivity.this, AsyncSubjectExampleActivity.class)); + startActivity(new Intent(OperatorsActivity.this, AsyncSubjectExampleActivity.class)); } public void startThrottleFirstActivity(View view) { - startActivity(new Intent(MainActivity.this,ThrottleFirstExampleActivity.class)); + startActivity(new Intent(OperatorsActivity.this,ThrottleFirstExampleActivity.class)); } public void startThrottleLastActivity(View view) { - startActivity(new Intent(MainActivity.this, ThrottleLastExampleActivity.class)); + startActivity(new Intent(OperatorsActivity.this, ThrottleLastExampleActivity.class)); } public void startDebounceActivity(View view) { - startActivity(new Intent(MainActivity.this, DebounceExampleActivity.class)); + startActivity(new Intent(OperatorsActivity.this, DebounceExampleActivity.class)); } public void startWindowActivity(View view) { - startActivity(new Intent(MainActivity.this,WindowExampleActivity.class)); + startActivity(new Intent(OperatorsActivity.this,WindowExampleActivity.class)); } diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/SelectionActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/SelectionActivity.java new file mode 100644 index 0000000..58a9514 --- /dev/null +++ b/app/src/main/java/com/rxjava2/android/samples/ui/SelectionActivity.java @@ -0,0 +1,27 @@ +package com.rxjava2.android.samples.ui; + +import android.content.Intent; +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.view.View; + +import com.rxjava2.android.samples.R; +import com.rxjava2.android.samples.ui.networking.NetworkingActivity; + +public class SelectionActivity extends AppCompatActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_selection); + } + + public void startOperatorsActivity(View view) { + startActivity(new Intent(SelectionActivity.this, OperatorsActivity.class)); + } + + public void startNetworkingActivity(View view) { + startActivity(new Intent(SelectionActivity.this, NetworkingActivity.class)); + } + +} diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/networking/NetworkingActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/networking/NetworkingActivity.java new file mode 100644 index 0000000..ef2bd9f --- /dev/null +++ b/app/src/main/java/com/rxjava2/android/samples/ui/networking/NetworkingActivity.java @@ -0,0 +1,10 @@ +package com.rxjava2.android.samples.ui.networking; + +import android.support.v7.app.AppCompatActivity; + +/** + * Created by amitshekhar on 04/02/17. + */ + +public class NetworkingActivity extends AppCompatActivity { +} diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_operators.xml similarity index 99% rename from app/src/main/res/layout/activity_main.xml rename to app/src/main/res/layout/activity_operators.xml index 7c37398..66deb1d 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_operators.xml @@ -3,12 +3,12 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" + android:fadeScrollbars="false" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" - android:fadeScrollbars="false" - tools:context="com.rxjava2.android.samples.ui.MainActivity"> + tools:context="com.rxjava2.android.samples.ui.OperatorsActivity"> + + + + +