diff --git a/README.md b/README.md
index cba8124..8aa4e01 100644
--- a/README.md
+++ b/README.md
@@ -2,139 +2,111 @@
# Learning RxJava 2 for Android by example
-[](https://mindorks.com/open-source-projects)
-[](https://mindorks.com/join-community)
-[](https://android-arsenal.com/details/3/4314)
-[](https://opensource.org/licenses/Apache-2.0)
-[](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/LICENSE)
-
-### [Get the complete RxJava Course Here](https://mindorks.com/course/learn-rxjava)
-
-## How to use RxJava 2 in Android Application
-## How to migrate from RxJava 1.0 to RxJava 2.0
-
### This project is for :
* who is migrating to RxJava 2
* or just started with RxJava.
-### Just Build the project and start learning RxJava by examples.
+## About me
-RxJava 2.0 has been completely rewritten from scratch on top of the Reactive-Streams specification. The specification itself has evolved out of RxJava 1.x and provides a common baseline for reactive systems and libraries.
+Hi, I am Amit Shekhar, Founder @ [Outcome School](https://outcomeschool.com) • IIT 2010-14 • I have taught and mentored many developers, and their efforts landed them high-paying tech jobs, helped many tech companies in solving their unique problems, and created many open-source libraries being used by top companies. I am passionate about sharing knowledge through open-source, blogs, and videos.
+
+### Follow Amit Shekhar
+
+- [X/Twitter](https://twitter.com/amitiitbhu)
+- [LinkedIn](https://www.linkedin.com/in/amit-shekhar-iitbhu)
+- [GitHub](https://github.com/amitshekhariitbhu)
-Because Reactive-Streams has a different architecture, it mandates changes to some well known RxJava types.
+### Follow Outcome School
+- [YouTube](https://youtube.com/@OutcomeSchool)
+- [X/Twitter](https://x.com/outcome_school)
+- [LinkedIn](https://www.linkedin.com/company/outcomeschool)
+- [GitHub](http://github.com/OutcomeSchool)
-# Migration From RxJava 1.0 to RxJava 2.0
+## I teach at Outcome School
-To allow having RxJava 1 and RxJava 2 side-by-side, RxJava 2 is under the maven coordinates
-io.reactivex.rxjava2:rxjava:2.x.y and classes are accessible below io.reactivex.
+- AI and Machine Learning
+- Android
-Users switching from 1.x to 2.x have to re-organize their imports, but carefully.
+Join Outcome School and get a high-paying tech job: [Outcome School](https://outcomeschool.com)
+
+### Just Build the project and start learning RxJava by examples.
+
+RxJava 2.0 has been completely rewritten from scratch on top of the Reactive-Streams specification. The specification itself has evolved out of RxJava 1.x and provides a common baseline for reactive systems and libraries.
### Using RxJava 2.0 Library in your application
Add this in your build.gradle
```groovy
-compile 'io.reactivex.rxjava2:rxjava:2.1.1'
+compile 'io.reactivex.rxjava2:rxjava:X.X.X'
```
If you are using RxAndroid also, then add the following
```groovy
-compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
+compile 'io.reactivex.rxjava2:rxandroid:X.X.X'
```
-# RxJava 2 Examples present in this sample project
-
-* RxJava 2.0 Example using `CompositeDisposable` as `CompositeSubscription` and `Subscription` have
-been removed.
-
-* RxJava 2 Example using `Flowable`.
+# RxJava 2 Operators Examples present in this sample project:
-* RxJava 2 Example using `SingleObserver`, `CompletableObserver`.
-
-* RxJava 2 Example using RxJava2 operators such as `map, zip, take, reduce, flatMap, filter, buffer, skip, merge, concat, replay`, and much more:
-
-* RxJava 2 Android Samples using `Function` as `Func1` has been removed.
-
-* RxJava 2 Android Samples using `BiFunction` as `Func2` has been removed.
-
-* And many others android examples
-
-# Quick Look on few changes done in RxJava2 over RxJava1
-
-RxJava1 -> RxJava2
-
-* `onCompleted` -> `onComplete` - without the trailing d
-* `Func1` -> `Function`
-* `Func2` -> `BiFunction`
-* `CompositeSubscription` -> `CompositeDisposable`
-* `limit` operator has been removed - Use `take` in RxJava2
-* and much more.
-
-# Operators :
-* `Map` -> transform the items emitted by an Observable by applying a function to each item
+* `Map` -> transform the items emitted by an Observable by applying a function to each item. Blog: [RxJava Operator Map vs FlatMap](https://outcomeschool.com/blog/rxjava-map-vs-flatmap)
* `Zip` -> combine the emissions of multiple Observables together via a specified function and emit single items for each combination based on the results of this function
* `Filter` -> emit only those items from an Observable that pass a predicate test
-* `FlatMap` -> transform the items emitted by an Observable into Observables, then flatten the emissions from those into a single Observable
-* `Take` -> emit only the first n items emitted by an Observable
+* `FlatMap` -> transform the items emitted by an Observable into Observables, then flatten the emissions from those into a single Observable. Blog: [RxJava Operator Map vs FlatMap](https://outcomeschool.com/blog/rxjava-map-vs-flatmap)
+* `Take` -> emit only the first n items emitted by an Observable. [Blog for reference](https://outcomeschool.com/blog/rxjava-interval-operator)
* `Reduce` -> apply a function to each item emitted by an Observable, sequentially, and emit the final value
* `Skip` -> suppress the first n items emitted by an Observable
* `Buffer` -> periodically gather items emitted by an Observable into bundles and emit these bundles rather than emitting the items one at a time
-* `Concat` -> emit the emissions from two or more Observables without interleaving them
+* `Concat` -> emit the emissions from two or more Observables without interleaving them. [Blog for reference](https://outcomeschool.com/blog/rxjava-concat-operator)
* `Replay` -> ensure that all observers see the same sequence of emitted items, even if they subscribe after the Observable has begun emitting items
* `Merge` -> combine multiple Observables into one by merging their emissions
+* `SwitchMap` -> transform the items emitted by an Observable into Observables, and mirror those items emitted by the most-recently transformed Observable
# Highlights of the examples :
-* [DisposableExampleActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/operators/DisposableExampleActivity.java) - Using `CompositeDisposable`
+* [DisposableExampleActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/operators/DisposableExampleActivity.java) - Using `CompositeDisposable`. [Blog for reference](https://outcomeschool.com/blog/dispose-vs-clear-compositedisposable-rxjava)
* [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
+* [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. Blog: [RxJava Operator Map vs FlatMap](https://outcomeschool.com/blog/rxjava-map-vs-flatmap)
* [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
+* [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. [Blog for reference](https://outcomeschool.com/blog/rxjava-interval-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
+* [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. [Blog for reference](https://outcomeschool.com/blog/rxjava-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`
-* [RxBusActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/rxbus/RxBusActivity.java) - RxBus, RxJava2Bus, EventBus, RxEventBus, [Blog for reference](https://blog.mindorks.com/implementing-eventbus-with-rxjava-rxbus-e6c940a94bd8)
-* [PaginationActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/pagination/PaginationActivity.java) - Pagination for loadMore in RecyclerView
+* [SwitchMapExampleActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/operators/SwitchMapExampleActivity.java) - Using `switchMap` 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`. [Blog for reference](https://outcomeschool.com/blog/rxjava-interval-operator)
+* [RxBusActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/rxbus/RxBusActivity.java) - RxBus, RxJava2Bus, EventBus, RxEventBus
+* [PaginationActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/pagination/PaginationActivity.java) - Pagination for loadMore in RecyclerView. Blog: [Pagination In RecyclerView Using RxJava Operators](https://outcomeschool.com/blog/pagination-in-recyclerview-using-rxjava-operators)
* [ComposeOperatorExampleActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/compose/ComposeOperatorExampleActivity.java) - Compose operator for reusable
-* [Search Implementation](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/search/SearchActivity.java) - Using `debounce`, `switchMap`, `distinctUntilChanged`, [Blog for reference](https://blog.mindorks.com/implement-search-using-rxjava-operators-c8882b64fe1d)
-
-### TODO
-
-* Many examples are to be added
+* [Search Implementation](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/search/SearchActivity.java) - Using `debounce`, `switchMap`, `distinctUntilChanged`
+* [Implement Caching Using RxJava Operators](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/cache/CacheExampleActivity.java) - Using `concat`, `firstElement`
+* [PublishSubjectExampleActivity](https://github.com/amitshekhariitbhu/RxJava2-Android-Samples/blob/master/app/src/main/java/com/rxjava2/android/samples/ui/operators/PublishSubjectExampleActivity.java). Blog: [RxJava Subject - Publish, Replay, Behavior, and Async](https://outcomeschool.com/blog/rxjava-subject-publish-replay-behavior-async)
### 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)
+Thanks
-### Check out an awesome library for fast and simple networking in Android.
-* [Fast Android Networking Library](https://github.com/amitshekhariitbhu/Fast-Android-Networking)
+**Amit Shekhar**\
+Co-Founder @ [Outcome School](https://outcomeschool.com)
-### Another awesome library for debugging databases and shared preferences.
-* [Android Debug Database](https://github.com/amitshekhariitbhu/Android-Debug-Database)
+You can connect with me on:
-### [Check out Mindorks awesome open source projects here](https://mindorks.com/open-source-projects)
-
-### Contact - Let's become friend
- [Twitter](https://twitter.com/amitiitbhu)
-- [Github](https://github.com/amitshekhariitbhu)
-- [Medium](https://medium.com/@amitshekhar)
+- [LinkedIn](https://www.linkedin.com/in/amit-shekhar-iitbhu)
+- [GitHub](https://github.com/amitshekhariitbhu)
- [Facebook](https://www.facebook.com/amit.shekhar.iitbhu)
+[**Read all of our blogs here.**](https://outcomeschool.com/blog)
+
### License
```
- Copyright (C) 2016 Amit Shekhar
- Copyright (C) 2011 Android Open Source Project
+ Copyright (C) 2024 Amit Shekhar
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -151,5 +123,4 @@ RxJava1 -> RxJava2
### Contributing to RxJava 2 Android Samples
Just make pull request. You are in!
-
diff --git a/app/build.gradle b/app/build.gradle
index 62fe87b..fe13a5b 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -1,13 +1,13 @@
apply plugin: 'com.android.application'
android {
- compileSdkVersion 25
- buildToolsVersion "25.0.2"
+ compileSdkVersion 28
+ buildToolsVersion "28.0.2"
defaultConfig {
applicationId "com.rxjava2.android.samples"
minSdkVersion 16
- targetSdkVersion 25
+ targetSdkVersion 28
versionCode 1
versionName "1.0"
}
@@ -17,14 +17,25 @@ android {
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
+ compileOptions {
+ sourceCompatibility = '1.8'
+ targetCompatibility = '1.8'
+ }
}
dependencies {
- compile fileTree(dir: 'libs', include: ['*.jar'])
- testCompile 'junit:junit:4.12'
- compile 'com.android.support:appcompat-v7:25.1.0'
- compile 'com.android.support:recyclerview-v7:25.1.0'
- compile 'io.reactivex.rxjava2:rxjava:2.1.1'
- compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
- compile 'com.amitshekhar.android:rx2-android-networking:1.0.0'
+ implementation fileTree(dir: 'libs', include: ['*.jar'])
+ testImplementation 'junit:junit:4.12'
+ androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha4'
+ androidTestImplementation 'androidx.test:runner:1.1.0-alpha4'
+ androidTestImplementation 'androidx.test:rules:1.1.0-alpha4'
+ implementation 'androidx.appcompat:appcompat:1.0.0-rc02'
+ implementation 'androidx.recyclerview:recyclerview:1.0.0-rc02'
+
+ // RxJava2 Dependencies
+ implementation 'io.reactivex.rxjava2:rxjava:2.2.2'
+ implementation 'io.reactivex.rxjava2:rxandroid:2.1.0'
+
+ // FastAndroidNetworking Dependency
+ implementation 'com.amitshekhar.android:rx2-android-networking:1.0.2'
}
diff --git a/app/src/androidTest/java/com/rxjava2/android/samples/ApplicationTest.java b/app/src/androidTest/java/com/rxjava2/android/samples/ApplicationTest.java
deleted file mode 100644
index ddaec0b..0000000
--- a/app/src/androidTest/java/com/rxjava2/android/samples/ApplicationTest.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.rxjava2.android.samples;
-
-import android.app.Application;
-import android.test.ApplicationTestCase;
-
-/**
- * Testing Fundamentals
- */
-public class ApplicationTest extends ApplicationTestCase {
- public ApplicationTest() {
- super(Application.class);
- }
-}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index c61e200..720343a 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -24,6 +24,9 @@
+
@@ -126,6 +129,15 @@
+
+
+
+
+
\ No newline at end of file
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 d4df621..781cb30 100644
--- a/app/src/main/java/com/rxjava2/android/samples/MyApplication.java
+++ b/app/src/main/java/com/rxjava2/android/samples/MyApplication.java
@@ -33,7 +33,7 @@ public void sendAutoEvent() {
Observable.timer(2, TimeUnit.SECONDS)
.subscribe(new Consumer() {
@Override
- public void accept(Long aLong) throws Exception {
+ public void accept(Long aLong) {
bus.send(new Events.AutoEvent());
}
});
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 e223650..a5ecffa 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
@@ -19,7 +19,7 @@ public void setBrand(String brand) {
public Observable brandDeferObservable() {
return Observable.defer(new Callable>() {
@Override
- public ObservableSource extends String> call() throws Exception {
+ public ObservableSource extends String> call() {
return Observable.just(brand);
}
});
diff --git a/app/src/main/java/com/rxjava2/android/samples/model/User.java b/app/src/main/java/com/rxjava2/android/samples/model/User.java
index bb11397..6fb84ad 100644
--- a/app/src/main/java/com/rxjava2/android/samples/model/User.java
+++ b/app/src/main/java/com/rxjava2/android/samples/model/User.java
@@ -27,4 +27,22 @@ public String toString() {
", isFollowing=" + isFollowing +
'}';
}
+
+ @Override
+ public int hashCode() {
+ return (int) id + firstname.hashCode() + lastname.hashCode();
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (obj instanceof User) {
+ User user = (User) obj;
+
+ return this.id == user.id
+ && this.firstname.equals(user.firstname)
+ && this.lastname.equals(user.lastname);
+ }
+
+ return false;
+ }
}
diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/OperatorsActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/OperatorsActivity.java
index 63df8a2..3986c9a 100644
--- a/app/src/main/java/com/rxjava2/android/samples/ui/OperatorsActivity.java
+++ b/app/src/main/java/com/rxjava2/android/samples/ui/OperatorsActivity.java
@@ -2,7 +2,6 @@
import android.content.Intent;
import android.os.Bundle;
-import android.support.v7.app.AppCompatActivity;
import android.view.View;
import com.rxjava2.android.samples.R;
@@ -30,13 +29,18 @@
import com.rxjava2.android.samples.ui.operators.SimpleExampleActivity;
import com.rxjava2.android.samples.ui.operators.SingleObserverExampleActivity;
import com.rxjava2.android.samples.ui.operators.SkipExampleActivity;
+import com.rxjava2.android.samples.ui.operators.SwitchMapExampleActivity;
import com.rxjava2.android.samples.ui.operators.TakeExampleActivity;
+import com.rxjava2.android.samples.ui.operators.TakeUntilExampleActivity;
+import com.rxjava2.android.samples.ui.operators.TakeWhileExampleActivity;
import com.rxjava2.android.samples.ui.operators.ThrottleFirstExampleActivity;
import com.rxjava2.android.samples.ui.operators.ThrottleLastExampleActivity;
import com.rxjava2.android.samples.ui.operators.TimerExampleActivity;
import com.rxjava2.android.samples.ui.operators.WindowExampleActivity;
import com.rxjava2.android.samples.ui.operators.ZipExampleActivity;
+import androidx.appcompat.app.AppCompatActivity;
+
public class OperatorsActivity extends AppCompatActivity {
@Override
@@ -165,4 +169,15 @@ public void startDelayActivity(View view) {
startActivity(new Intent(OperatorsActivity.this,DelayExampleActivity.class));
}
+ public void startSwitchMapActivity(View view) {
+ startActivity(new Intent(OperatorsActivity.this, SwitchMapExampleActivity.class));
+ }
+
+ public void startTakeWhileActivity(View view) {
+ startActivity(new Intent(OperatorsActivity.this, TakeWhileExampleActivity.class));
+ }
+
+ public void startTakeUntilActivity(View view) {
+ startActivity(new Intent(OperatorsActivity.this, TakeUntilExampleActivity.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
index d3c6082..fd392dd 100644
--- a/app/src/main/java/com/rxjava2/android/samples/ui/SelectionActivity.java
+++ b/app/src/main/java/com/rxjava2/android/samples/ui/SelectionActivity.java
@@ -2,17 +2,19 @@
import android.content.Intent;
import android.os.Bundle;
-import android.support.v7.app.AppCompatActivity;
import android.view.View;
import com.rxjava2.android.samples.MyApplication;
import com.rxjava2.android.samples.R;
+import com.rxjava2.android.samples.ui.cache.CacheExampleActivity;
import com.rxjava2.android.samples.ui.compose.ComposeOperatorExampleActivity;
import com.rxjava2.android.samples.ui.networking.NetworkingActivity;
import com.rxjava2.android.samples.ui.pagination.PaginationActivity;
import com.rxjava2.android.samples.ui.rxbus.RxBusActivity;
import com.rxjava2.android.samples.ui.search.SearchActivity;
+import androidx.appcompat.app.AppCompatActivity;
+
public class SelectionActivity extends AppCompatActivity {
@Override
@@ -29,6 +31,10 @@ public void startNetworkingActivity(View view) {
startActivity(new Intent(SelectionActivity.this, NetworkingActivity.class));
}
+ public void startCacheActivity(View view) {
+ startActivity(new Intent(SelectionActivity.this, CacheExampleActivity.class));
+ }
+
public void startRxBusActivity(View view) {
((MyApplication) getApplication()).sendAutoEvent();
startActivity(new Intent(SelectionActivity.this, RxBusActivity.class));
diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/cache/CacheExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/cache/CacheExampleActivity.java
new file mode 100644
index 0000000..bd98f63
--- /dev/null
+++ b/app/src/main/java/com/rxjava2/android/samples/ui/cache/CacheExampleActivity.java
@@ -0,0 +1,93 @@
+package com.rxjava2.android.samples.ui.cache;
+
+import android.os.Bundle;
+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.ui.cache.model.Data;
+import com.rxjava2.android.samples.ui.cache.source.DataSource;
+import com.rxjava2.android.samples.ui.cache.source.DiskDataSource;
+import com.rxjava2.android.samples.ui.cache.source.MemoryDataSource;
+import com.rxjava2.android.samples.ui.cache.source.NetworkDataSource;
+import com.rxjava2.android.samples.utils.AppConstant;
+
+import androidx.appcompat.app.AppCompatActivity;
+import io.reactivex.Observable;
+import io.reactivex.Observer;
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.disposables.Disposable;
+import io.reactivex.schedulers.Schedulers;
+
+public class CacheExampleActivity extends AppCompatActivity {
+
+ private static final String TAG = CacheExampleActivity.class.getSimpleName();
+ Button btn;
+ TextView textView;
+ DataSource dataSource;
+
+ @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();
+ }
+ });
+
+ dataSource = new DataSource(new MemoryDataSource(), new DiskDataSource(), new NetworkDataSource());
+ }
+
+ private void doSomeWork() {
+
+ Observable memory = dataSource.getDataFromMemory();
+ Observable disk = dataSource.getDataFromDisk();
+ Observable network = dataSource.getDataFromNetwork();
+
+ Observable.concat(memory, disk, network)
+ .firstElement()
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .toObservable()
+ .subscribe(getObserver());
+ }
+
+ private Observer getObserver() {
+ return new Observer() {
+
+ @Override
+ public void onSubscribe(Disposable d) {
+ Log.d(TAG, " onSubscribe : " + d.isDisposed());
+ }
+
+ @Override
+ public void onNext(Data data) {
+ textView.append(" onNext : " + data.source);
+ textView.append(AppConstant.LINE_SEPARATOR);
+ Log.d(TAG, " onNext : " + data.source);
+ }
+
+ @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/cache/model/Data.java b/app/src/main/java/com/rxjava2/android/samples/ui/cache/model/Data.java
new file mode 100644
index 0000000..477144e
--- /dev/null
+++ b/app/src/main/java/com/rxjava2/android/samples/ui/cache/model/Data.java
@@ -0,0 +1,12 @@
+package com.rxjava2.android.samples.ui.cache.model;
+
+public class Data {
+
+ public String source;
+
+ @SuppressWarnings("CloneDoesntDeclareCloneNotSupportedException")
+ @Override
+ public Data clone() {
+ return new Data();
+ }
+}
diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/cache/source/DataSource.java b/app/src/main/java/com/rxjava2/android/samples/ui/cache/source/DataSource.java
new file mode 100644
index 0000000..23403ff
--- /dev/null
+++ b/app/src/main/java/com/rxjava2/android/samples/ui/cache/source/DataSource.java
@@ -0,0 +1,41 @@
+package com.rxjava2.android.samples.ui.cache.source;
+
+import com.rxjava2.android.samples.ui.cache.model.Data;
+
+import io.reactivex.Observable;
+
+/**
+ * The DataSource to handle 3 data sources - memory, disk, network
+ */
+public class DataSource {
+
+ private final MemoryDataSource memoryDataSource;
+ private final DiskDataSource diskDataSource;
+ private final NetworkDataSource networkDataSource;
+
+ public DataSource(MemoryDataSource memoryDataSource,
+ DiskDataSource diskDataSource,
+ NetworkDataSource networkDataSource) {
+ this.memoryDataSource = memoryDataSource;
+ this.diskDataSource = diskDataSource;
+ this.networkDataSource = networkDataSource;
+ }
+
+ public Observable getDataFromMemory() {
+ return memoryDataSource.getData();
+ }
+
+ public Observable getDataFromDisk() {
+ return diskDataSource.getData().doOnNext(data ->
+ memoryDataSource.cacheInMemory(data)
+ );
+ }
+
+ public Observable getDataFromNetwork() {
+ return networkDataSource.getData().doOnNext(data -> {
+ diskDataSource.saveToDisk(data);
+ memoryDataSource.cacheInMemory(data);
+ });
+ }
+
+}
diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/cache/source/DiskDataSource.java b/app/src/main/java/com/rxjava2/android/samples/ui/cache/source/DiskDataSource.java
new file mode 100644
index 0000000..29f5bfa
--- /dev/null
+++ b/app/src/main/java/com/rxjava2/android/samples/ui/cache/source/DiskDataSource.java
@@ -0,0 +1,28 @@
+package com.rxjava2.android.samples.ui.cache.source;
+
+import com.rxjava2.android.samples.ui.cache.model.Data;
+
+import io.reactivex.Observable;
+
+/**
+ * Class to simulate Disk DataSource
+ */
+public class DiskDataSource {
+
+ private Data data;
+
+ public Observable getData() {
+ return Observable.create(emitter -> {
+ if (data != null) {
+ emitter.onNext(data);
+ }
+ emitter.onComplete();
+ });
+ }
+
+ public void saveToDisk(Data data) {
+ this.data = data.clone();
+ this.data.source = "disk";
+ }
+
+}
diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/cache/source/MemoryDataSource.java b/app/src/main/java/com/rxjava2/android/samples/ui/cache/source/MemoryDataSource.java
new file mode 100644
index 0000000..2742f26
--- /dev/null
+++ b/app/src/main/java/com/rxjava2/android/samples/ui/cache/source/MemoryDataSource.java
@@ -0,0 +1,28 @@
+package com.rxjava2.android.samples.ui.cache.source;
+
+import com.rxjava2.android.samples.ui.cache.model.Data;
+
+import io.reactivex.Observable;
+
+/**
+ * Class to simulate InMemory DataSource
+ */
+public class MemoryDataSource {
+
+ private Data data;
+
+ public Observable getData() {
+ return Observable.create(emitter -> {
+ if (data != null) {
+ emitter.onNext(data);
+ }
+ emitter.onComplete();
+ });
+ }
+
+ public void cacheInMemory(Data data) {
+ this.data = data.clone();
+ this.data.source = "memory";
+ }
+
+}
diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/cache/source/NetworkDataSource.java b/app/src/main/java/com/rxjava2/android/samples/ui/cache/source/NetworkDataSource.java
new file mode 100644
index 0000000..d903fb0
--- /dev/null
+++ b/app/src/main/java/com/rxjava2/android/samples/ui/cache/source/NetworkDataSource.java
@@ -0,0 +1,22 @@
+package com.rxjava2.android.samples.ui.cache.source;
+
+import com.rxjava2.android.samples.ui.cache.model.Data;
+
+import io.reactivex.Observable;
+
+
+/**
+ * Class to simulate Network DataSource
+ */
+public class NetworkDataSource {
+
+ public Observable getData() {
+ return Observable.create(emitter -> {
+ Data data = new Data();
+ data.source = "network";
+ emitter.onNext(data);
+ emitter.onComplete();
+ });
+ }
+
+}
diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/compose/ComposeOperatorExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/compose/ComposeOperatorExampleActivity.java
index faf2291..89ab45b 100644
--- a/app/src/main/java/com/rxjava2/android/samples/ui/compose/ComposeOperatorExampleActivity.java
+++ b/app/src/main/java/com/rxjava2/android/samples/ui/compose/ComposeOperatorExampleActivity.java
@@ -1,10 +1,10 @@
package com.rxjava2.android.samples.ui.compose;
import android.os.Bundle;
-import android.support.v7.app.AppCompatActivity;
import com.rxjava2.android.samples.R;
+import androidx.appcompat.app.AppCompatActivity;
import io.reactivex.Flowable;
import io.reactivex.Observable;
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
index f651870..6878e3a 100644
--- 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
@@ -1,11 +1,12 @@
package com.rxjava2.android.samples.ui.networking;
import android.os.Bundle;
-import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.util.Pair;
import android.view.View;
+import androidx.appcompat.app.AppCompatActivity;
+
import com.rx2androidnetworking.Rx2AndroidNetworking;
import com.rxjava2.android.samples.R;
import com.rxjava2.android.samples.model.ApiUser;
@@ -52,7 +53,7 @@ public void map(View view) {
.observeOn(AndroidSchedulers.mainThread())
.map(new Function() {
@Override
- public User apply(ApiUser apiUser) throws Exception {
+ public User apply(ApiUser apiUser) {
// here we get ApiUser from server
User user = new User(apiUser);
// then by converting, we are returning user
@@ -93,29 +94,31 @@ public void onComplete() {
private Observable> getCricketFansObservable() {
return Rx2AndroidNetworking.get("https://fierce-cove-29863.herokuapp.com/getAllCricketFans")
.build()
- .getObjectListObservable(User.class);
+ .getObjectListObservable(User.class)
+ .subscribeOn(Schedulers.io());
}
/*
- * This observable return the list of User who loves Football
- */
+ * This observable return the list of User who loves Football
+ */
private Observable> getFootballFansObservable() {
return Rx2AndroidNetworking.get("https://fierce-cove-29863.herokuapp.com/getAllFootballFans")
.build()
- .getObjectListObservable(User.class);
+ .getObjectListObservable(User.class)
+ .subscribeOn(Schedulers.io());
}
/*
- * This do the complete magic, make both network call
- * and then returns the list of user who loves both
- * Using zip operator to get both response at a time
- */
+ * This do the complete magic, make both network call
+ * and then returns the list of user who loves both
+ * Using zip operator to get both response at a time
+ */
private void findUsersWhoLovesBoth() {
// here we are using zip operator to combine both request
Observable.zip(getCricketFansObservable(), getFootballFansObservable(),
new BiFunction, List, List>() {
@Override
- public List apply(List cricketFans, List footballFans) throws Exception {
+ public List apply(List cricketFans, List footballFans) {
List userWhoLovesBoth =
filterUserWhoLovesBoth(cricketFans, footballFans);
return userWhoLovesBoth;
@@ -152,13 +155,13 @@ public void onComplete() {
private List filterUserWhoLovesBoth(List cricketFans, List footballFans) {
List userWhoLovesBoth = new ArrayList<>();
- for (User cricketFan : cricketFans) {
- for (User footballFan : footballFans) {
- if (cricketFan.id == footballFan.id) {
- userWhoLovesBoth.add(cricketFan);
- }
+
+ for (User footballFan : footballFans) {
+ if (cricketFans.contains(footballFan)) {
+ userWhoLovesBoth.add(footballFan);
}
}
+
return userWhoLovesBoth;
}
@@ -183,13 +186,13 @@ public void flatMapAndFilter(View view) {
getAllMyFriendsObservable()
.flatMap(new Function, ObservableSource>() { // flatMap - to return users one by one
@Override
- public ObservableSource apply(List usersList) throws Exception {
+ public ObservableSource apply(List usersList) {
return Observable.fromIterable(usersList); // returning user one by one from usersList.
}
})
.filter(new Predicate() {
@Override
- public boolean test(User user) throws Exception {
+ public boolean test(User user) {
// filtering user who follows me.
return user.isFollowing;
}
@@ -229,7 +232,7 @@ public void take(View view) {
getUserListObservable()
.flatMap(new Function, ObservableSource>() { // flatMap - to return users one by one
@Override
- public ObservableSource apply(List usersList) throws Exception {
+ public ObservableSource apply(List usersList) {
return Observable.fromIterable(usersList); // returning user one by one from usersList.
}
})
@@ -269,13 +272,13 @@ public void flatMap(View view) {
getUserListObservable()
.flatMap(new Function, ObservableSource>() { // flatMap - to return users one by one
@Override
- public ObservableSource apply(List usersList) throws Exception {
+ public ObservableSource apply(List usersList) {
return Observable.fromIterable(usersList); // returning user one by one from usersList.
}
})
.flatMap(new Function>() {
@Override
- public ObservableSource apply(User user) throws Exception {
+ public ObservableSource apply(User user) {
// here we get the user one by one
// and returns corresponding getUserDetailObservable
// for that userId
@@ -331,13 +334,13 @@ public void flatMapWithZip(View view) {
getUserListObservable()
.flatMap(new Function, ObservableSource>() { // flatMap - to return users one by one
@Override
- public ObservableSource apply(List usersList) throws Exception {
+ public ObservableSource apply(List usersList) {
return Observable.fromIterable(usersList); // returning user one by one from usersList.
}
})
.flatMap(new Function>>() {
@Override
- public ObservableSource> apply(User user) throws Exception {
+ public ObservableSource> apply(User user) {
// here we get the user one by one and then we are zipping
// two observable - one getUserDetailObservable (network call to get userDetail)
// and another Observable.just(user) - just to emit user
@@ -345,7 +348,7 @@ public ObservableSource> apply(User user) throws Exceptio
Observable.just(user),
new BiFunction>() {
@Override
- public Pair apply(UserDetail userDetail, User user) throws Exception {
+ public Pair apply(UserDetail userDetail, User user) {
// runs when network call completes
// we get here userDetail for the corresponding user
return new Pair<>(userDetail, user); // returning the pair(userDetail, user)
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 501bc63..d2243a2 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,7 +1,6 @@
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;
@@ -10,6 +9,7 @@
import com.rxjava2.android.samples.R;
import com.rxjava2.android.samples.utils.AppConstant;
+import androidx.appcompat.app.AppCompatActivity;
import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;
import io.reactivex.subjects.AsyncSubject;
@@ -28,8 +28,8 @@ public class AsyncSubjectExampleActivity extends AppCompatActivity {
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 = findViewById(R.id.btn);
+ textView = findViewById(R.id.textView);
btn.setOnClickListener(new View.OnClickListener() {
@Override
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 e398fd8..9eeadd0 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,7 +1,6 @@
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;
@@ -10,6 +9,7 @@
import com.rxjava2.android.samples.R;
import com.rxjava2.android.samples.utils.AppConstant;
+import androidx.appcompat.app.AppCompatActivity;
import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;
import io.reactivex.subjects.BehaviorSubject;
@@ -28,8 +28,8 @@ public class BehaviorSubjectExampleActivity extends AppCompatActivity {
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 = findViewById(R.id.btn);
+ textView = findViewById(R.id.textView);
btn.setOnClickListener(new View.OnClickListener() {
@Override
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 ead4b70..9171136 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,7 +1,6 @@
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;
@@ -12,6 +11,7 @@
import java.util.List;
+import androidx.appcompat.app.AppCompatActivity;
import io.reactivex.Observable;
import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;
@@ -29,8 +29,8 @@ public class BufferExampleActivity extends AppCompatActivity {
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 = findViewById(R.id.btn);
+ textView = findViewById(R.id.textView);
btn.setOnClickListener(new View.OnClickListener() {
@Override
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 1f7451a..4ee612f 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,7 +1,6 @@
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;
@@ -12,6 +11,7 @@
import java.util.concurrent.TimeUnit;
+import androidx.appcompat.app.AppCompatActivity;
import io.reactivex.Completable;
import io.reactivex.CompletableObserver;
import io.reactivex.android.schedulers.AndroidSchedulers;
@@ -31,8 +31,8 @@ public class CompletableObserverExampleActivity extends AppCompatActivity {
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 = findViewById(R.id.btn);
+ textView = findViewById(R.id.textView);
btn.setOnClickListener(new View.OnClickListener() {
@Override
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 ce4a3f5..8bb3e2b 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,7 +1,6 @@
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;
@@ -10,6 +9,7 @@
import com.rxjava2.android.samples.R;
import com.rxjava2.android.samples.utils.AppConstant;
+import androidx.appcompat.app.AppCompatActivity;
import io.reactivex.Observable;
import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;
@@ -27,8 +27,8 @@ public class ConcatExampleActivity extends AppCompatActivity {
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 = findViewById(R.id.btn);
+ textView = findViewById(R.id.textView);
btn.setOnClickListener(new View.OnClickListener() {
@Override
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 d0f9802..7837381 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,7 +1,6 @@
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;
@@ -12,6 +11,7 @@
import java.util.concurrent.TimeUnit;
+import androidx.appcompat.app.AppCompatActivity;
import io.reactivex.Observable;
import io.reactivex.ObservableEmitter;
import io.reactivex.ObservableOnSubscribe;
@@ -34,8 +34,8 @@ public class DebounceExampleActivity extends AppCompatActivity {
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 = findViewById(R.id.btn);
+ textView = findViewById(R.id.textView);
btn.setOnClickListener(new View.OnClickListener() {
@Override
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 4aed8c6..0e6249c 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,7 +1,6 @@
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;
@@ -11,6 +10,7 @@
import com.rxjava2.android.samples.model.Car;
import com.rxjava2.android.samples.utils.AppConstant;
+import androidx.appcompat.app.AppCompatActivity;
import io.reactivex.Observable;
import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;
@@ -28,8 +28,8 @@ public class DeferExampleActivity extends AppCompatActivity {
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 = findViewById(R.id.btn);
+ textView = findViewById(R.id.textView);
btn.setOnClickListener(new View.OnClickListener() {
@Override
diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/DelayExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/DelayExampleActivity.java
index 2979e75..212092c 100644
--- a/app/src/main/java/com/rxjava2/android/samples/ui/operators/DelayExampleActivity.java
+++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/DelayExampleActivity.java
@@ -1,7 +1,6 @@
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;
@@ -12,6 +11,7 @@
import java.util.concurrent.TimeUnit;
+import androidx.appcompat.app.AppCompatActivity;
import io.reactivex.Observable;
import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
@@ -32,8 +32,8 @@ public class DelayExampleActivity extends AppCompatActivity {
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 = findViewById(R.id.btn);
+ textView = findViewById(R.id.textView);
btn.setOnClickListener(new View.OnClickListener() {
@Override
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 2dd124b..9e51b3c 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
@@ -2,7 +2,6 @@
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;
@@ -13,6 +12,7 @@
import java.util.concurrent.Callable;
+import androidx.appcompat.app.AppCompatActivity;
import io.reactivex.Observable;
import io.reactivex.ObservableSource;
import io.reactivex.android.schedulers.AndroidSchedulers;
@@ -34,8 +34,8 @@ public class DisposableExampleActivity extends AppCompatActivity {
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 = findViewById(R.id.btn);
+ textView = findViewById(R.id.textView);
btn.setOnClickListener(new View.OnClickListener() {
@Override
@@ -88,7 +88,7 @@ public void onNext(String value) {
static Observable sampleObservable() {
return Observable.defer(new Callable>() {
@Override
- public ObservableSource extends String> call() throws Exception {
+ public ObservableSource extends String> call() {
// Do some long running operation
SystemClock.sleep(2000);
return Observable.just("one", "two", "three", "four", "five");
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 8e5f2f6..af2c0e3 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,8 +1,6 @@
package com.rxjava2.android.samples.ui.operators;
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;
@@ -11,6 +9,8 @@
import com.rxjava2.android.samples.R;
import com.rxjava2.android.samples.utils.AppConstant;
+import androidx.annotation.Nullable;
+import androidx.appcompat.app.AppCompatActivity;
import io.reactivex.Observable;
import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;
@@ -28,8 +28,8 @@ public class DistinctExampleActivity extends AppCompatActivity {
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 = findViewById(R.id.btn);
+ textView = findViewById(R.id.textView);
btn.setOnClickListener(new View.OnClickListener() {
@Override
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 e470182..35ddf9a 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,7 +1,6 @@
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;
@@ -10,6 +9,7 @@
import com.rxjava2.android.samples.R;
import com.rxjava2.android.samples.utils.AppConstant;
+import androidx.appcompat.app.AppCompatActivity;
import io.reactivex.Observable;
import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;
@@ -29,8 +29,8 @@ public class FilterExampleActivity extends AppCompatActivity {
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 = findViewById(R.id.btn);
+ textView = findViewById(R.id.textView);
btn.setOnClickListener(new View.OnClickListener() {
@Override
@@ -48,7 +48,7 @@ private void doSomeWork() {
Observable.just(1, 2, 3, 4, 5, 6)
.filter(new Predicate() {
@Override
- public boolean test(Integer integer) throws Exception {
+ public boolean test(Integer integer) {
return integer % 2 == 0;
}
})
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 7303cc2..2bf727f 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,7 +1,6 @@
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;
@@ -10,6 +9,7 @@
import com.rxjava2.android.samples.R;
import com.rxjava2.android.samples.utils.AppConstant;
+import androidx.appcompat.app.AppCompatActivity;
import io.reactivex.Flowable;
import io.reactivex.SingleObserver;
import io.reactivex.disposables.Disposable;
@@ -28,8 +28,8 @@ public class FlowableExampleActivity extends AppCompatActivity {
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 = findViewById(R.id.btn);
+ textView = findViewById(R.id.textView);
btn.setOnClickListener(new View.OnClickListener() {
@Override
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 22469be..36baeaf 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,7 +1,6 @@
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;
@@ -12,6 +11,7 @@
import java.util.concurrent.TimeUnit;
+import androidx.appcompat.app.AppCompatActivity;
import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.CompositeDisposable;
@@ -32,8 +32,8 @@ public class IntervalExampleActivity extends AppCompatActivity {
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 = findViewById(R.id.btn);
+ textView = findViewById(R.id.textView);
btn.setOnClickListener(new View.OnClickListener() {
@Override
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 b1c86ff..5cc3087 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,8 +1,6 @@
package com.rxjava2.android.samples.ui.operators;
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;
@@ -11,6 +9,8 @@
import com.rxjava2.android.samples.R;
import com.rxjava2.android.samples.utils.AppConstant;
+import androidx.annotation.Nullable;
+import androidx.appcompat.app.AppCompatActivity;
import io.reactivex.Observable;
import io.reactivex.SingleObserver;
import io.reactivex.disposables.Disposable;
@@ -29,8 +29,8 @@ public class LastOperatorExampleActivity extends AppCompatActivity {
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 = findViewById(R.id.btn);
+ textView = findViewById(R.id.textView);
btn.setOnClickListener(new View.OnClickListener() {
@Override
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 ccc6ace..29794ca 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,7 +1,6 @@
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;
@@ -15,6 +14,7 @@
import java.util.List;
+import androidx.appcompat.app.AppCompatActivity;
import io.reactivex.Observable;
import io.reactivex.ObservableEmitter;
import io.reactivex.ObservableOnSubscribe;
@@ -37,8 +37,8 @@ public class MapExampleActivity extends AppCompatActivity {
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 = findViewById(R.id.btn);
+ textView = findViewById(R.id.textView);
btn.setOnClickListener(new View.OnClickListener() {
@Override
@@ -63,7 +63,7 @@ private void doSomeWork() {
.map(new Function, List>() {
@Override
- public List apply(List apiUsers) throws Exception {
+ public List apply(List apiUsers) {
return Utils.convertApiUserListToUserList(apiUsers);
}
})
@@ -73,7 +73,7 @@ public List apply(List apiUsers) throws Exception {
private Observable> getObservable() {
return Observable.create(new ObservableOnSubscribe>() {
@Override
- public void subscribe(ObservableEmitter> e) throws Exception {
+ public void subscribe(ObservableEmitter> e) {
if (!e.isDisposed()) {
e.onNext(Utils.getApiUserList());
e.onComplete();
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 0cd7487..01551bf 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,7 +1,6 @@
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;
@@ -10,6 +9,7 @@
import com.rxjava2.android.samples.R;
import com.rxjava2.android.samples.utils.AppConstant;
+import androidx.appcompat.app.AppCompatActivity;
import io.reactivex.Observable;
import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;
@@ -27,8 +27,8 @@ public class MergeExampleActivity extends AppCompatActivity {
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 = findViewById(R.id.btn);
+ textView = findViewById(R.id.textView);
btn.setOnClickListener(new View.OnClickListener() {
@Override
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 af8822c..d03266b 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,7 +1,6 @@
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;
@@ -10,6 +9,7 @@
import com.rxjava2.android.samples.R;
import com.rxjava2.android.samples.utils.AppConstant;
+import androidx.appcompat.app.AppCompatActivity;
import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;
import io.reactivex.subjects.PublishSubject;
@@ -28,8 +28,8 @@ public class PublishSubjectExampleActivity extends AppCompatActivity {
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 = findViewById(R.id.btn);
+ textView = findViewById(R.id.textView);
btn.setOnClickListener(new View.OnClickListener() {
@Override
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 1ab9930..aa8aec1 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,7 +1,6 @@
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;
@@ -10,6 +9,7 @@
import com.rxjava2.android.samples.R;
import com.rxjava2.android.samples.utils.AppConstant;
+import androidx.appcompat.app.AppCompatActivity;
import io.reactivex.MaybeObserver;
import io.reactivex.Observable;
import io.reactivex.disposables.Disposable;
@@ -28,8 +28,8 @@ public class ReduceExampleActivity extends AppCompatActivity {
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 = findViewById(R.id.btn);
+ textView = findViewById(R.id.textView);
btn.setOnClickListener(new View.OnClickListener() {
@Override
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 8880ea9..c1ce888 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,7 +1,6 @@
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;
@@ -10,6 +9,7 @@
import com.rxjava2.android.samples.R;
import com.rxjava2.android.samples.utils.AppConstant;
+import androidx.appcompat.app.AppCompatActivity;
import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;
import io.reactivex.observables.ConnectableObservable;
@@ -28,8 +28,8 @@ public class ReplayExampleActivity extends AppCompatActivity {
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 = findViewById(R.id.btn);
+ textView = findViewById(R.id.textView);
btn.setOnClickListener(new View.OnClickListener() {
@Override
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 7f09563..34bb5e4 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,7 +1,6 @@
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;
@@ -10,6 +9,7 @@
import com.rxjava2.android.samples.R;
import com.rxjava2.android.samples.utils.AppConstant;
+import androidx.appcompat.app.AppCompatActivity;
import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;
import io.reactivex.subjects.ReplaySubject;
@@ -28,8 +28,8 @@ public class ReplaySubjectExampleActivity extends AppCompatActivity {
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 = findViewById(R.id.btn);
+ textView = findViewById(R.id.textView);
btn.setOnClickListener(new View.OnClickListener() {
@Override
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 f70e667..0c263c2 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,7 +1,6 @@
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;
@@ -10,6 +9,7 @@
import com.rxjava2.android.samples.R;
import com.rxjava2.android.samples.utils.AppConstant;
+import androidx.appcompat.app.AppCompatActivity;
import io.reactivex.Observable;
import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
@@ -27,8 +27,8 @@ public class ScanExampleActivity extends AppCompatActivity {
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 = findViewById(R.id.btn);
+ textView = findViewById(R.id.textView);
btn.setOnClickListener(new View.OnClickListener() {
@Override
@@ -47,7 +47,7 @@ private void doSomeWork() {
.observeOn(AndroidSchedulers.mainThread())
.scan(new BiFunction() {
@Override
- public Integer apply(Integer int1, Integer int2) throws Exception {
+ public Integer apply(Integer int1, Integer int2) {
return int1 + int2;
}
})
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 423047d..6329b1b 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,7 +1,6 @@
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;
@@ -10,6 +9,7 @@
import com.rxjava2.android.samples.R;
import com.rxjava2.android.samples.utils.AppConstant;
+import androidx.appcompat.app.AppCompatActivity;
import io.reactivex.Observable;
import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
@@ -29,8 +29,8 @@ public class SimpleExampleActivity extends AppCompatActivity {
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 = findViewById(R.id.btn);
+ textView = findViewById(R.id.textView);
btn.setOnClickListener(new View.OnClickListener() {
@Override
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 6c9ce7c..403f070 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,7 +1,6 @@
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;
@@ -10,6 +9,7 @@
import com.rxjava2.android.samples.R;
import com.rxjava2.android.samples.utils.AppConstant;
+import androidx.appcompat.app.AppCompatActivity;
import io.reactivex.Single;
import io.reactivex.SingleObserver;
import io.reactivex.disposables.Disposable;
@@ -27,8 +27,8 @@ public class SingleObserverExampleActivity extends AppCompatActivity {
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 = findViewById(R.id.btn);
+ textView = findViewById(R.id.textView);
btn.setOnClickListener(new View.OnClickListener() {
@Override
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 26706ea..06ad8eb 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,7 +1,6 @@
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;
@@ -10,6 +9,7 @@
import com.rxjava2.android.samples.R;
import com.rxjava2.android.samples.utils.AppConstant;
+import androidx.appcompat.app.AppCompatActivity;
import io.reactivex.Observable;
import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
@@ -29,8 +29,8 @@ public class SkipExampleActivity extends AppCompatActivity {
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 = findViewById(R.id.btn);
+ textView = findViewById(R.id.textView);
btn.setOnClickListener(new View.OnClickListener() {
@Override
diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/SwitchMapExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/SwitchMapExampleActivity.java
new file mode 100644
index 0000000..d787bc5
--- /dev/null
+++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/SwitchMapExampleActivity.java
@@ -0,0 +1,105 @@
+package com.rxjava2.android.samples.ui.operators;
+
+import android.os.Bundle;
+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.Random;
+import java.util.concurrent.TimeUnit;
+
+import androidx.annotation.Nullable;
+import androidx.appcompat.app.AppCompatActivity;
+import io.reactivex.Observable;
+import io.reactivex.ObservableSource;
+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 thanhtuan on 26/04/18.
+ */
+public class SwitchMapExampleActivity extends AppCompatActivity {
+
+ private static final String TAG = SwitchMapExampleActivity.class.getSimpleName();
+ Button btn;
+ TextView textView;
+
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_example);
+
+ btn = findViewById(R.id.btn);
+ textView = findViewById(R.id.textView);
+
+ btn.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ doSomeWork();
+ }
+ });
+ }
+
+ /* whenever a new item is emitted by the source Observable, it will unsubscribe to and stop
+ * mirroring the Observable that was generated from the previously-emitted item,
+ * and begin only mirroring the current one.
+ *
+ * Result: 5x
+ */
+ private void doSomeWork() {
+ getObservable()
+ .switchMap(new Function>() {
+ @Override
+ public ObservableSource apply(Integer integer) {
+ int delay = new Random().nextInt(2);
+
+ return Observable.just(integer.toString() + "x")
+ .delay(delay, TimeUnit.SECONDS, Schedulers.io());
+ }
+ })
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(getObserver());
+ }
+
+ 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(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");
+ }
+ };
+ }
+}
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 ae71924..74b4b9f 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,7 +1,6 @@
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;
@@ -10,6 +9,7 @@
import com.rxjava2.android.samples.R;
import com.rxjava2.android.samples.utils.AppConstant;
+import androidx.appcompat.app.AppCompatActivity;
import io.reactivex.Observable;
import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
@@ -29,8 +29,8 @@ public class TakeExampleActivity extends AppCompatActivity {
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 = findViewById(R.id.btn);
+ textView = findViewById(R.id.textView);
btn.setOnClickListener(new View.OnClickListener() {
@Override
diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/TakeOperatorBaseActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/TakeOperatorBaseActivity.java
new file mode 100644
index 0000000..a078b5b
--- /dev/null
+++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/TakeOperatorBaseActivity.java
@@ -0,0 +1,71 @@
+package com.rxjava2.android.samples.ui.operators;
+
+import android.os.Bundle;
+import android.util.Log;
+import android.widget.Button;
+import android.widget.TextView;
+
+import com.rxjava2.android.samples.R;
+import com.rxjava2.android.samples.utils.AppConstant;
+import com.rxjava2.android.samples.utils.ObserverAdapter;
+
+import androidx.annotation.Nullable;
+import androidx.appcompat.app.AppCompatActivity;
+import io.reactivex.Observable;
+import io.reactivex.Observer;
+import io.reactivex.disposables.Disposable;
+
+public abstract class TakeOperatorBaseActivity extends AppCompatActivity {
+ private static final String TAG = TakeWhileExampleActivity.class.getSimpleName();
+
+ private Button btn;
+
+ protected TextView textView;
+
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_example);
+ btn = findViewById(R.id.btn);
+ textView = findViewById(R.id.textView);
+
+ btn.setOnClickListener(view -> {
+ doSomeWork();
+ });
+ }
+
+ /**
+ * Need to be override based on the operation.
+ */
+ abstract void doSomeWork();
+
+ protected Observer super String> getObserver() {
+ return new ObserverAdapter() {
+ @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 onComplete() {
+ textView.append(" onComplete");
+ textView.append(AppConstant.LINE_SEPARATOR);
+ Log.d(TAG, " onComplete");
+ }
+ };
+ }
+
+
+ protected Observable getStringObservable() {
+ return Observable.just("Alpha", "Beta", "Cupcake", "Doughnut", "Eclair", "Froyo", "GingerBread",
+ "Honeycomb", "Ice cream sandwich");
+ }
+
+}
diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/TakeUntilExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/TakeUntilExampleActivity.java
new file mode 100644
index 0000000..e0313d0
--- /dev/null
+++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/TakeUntilExampleActivity.java
@@ -0,0 +1,45 @@
+package com.rxjava2.android.samples.ui.operators;
+
+import android.util.Log;
+
+import com.rxjava2.android.samples.utils.AppConstant;
+import com.rxjava2.android.samples.utils.ObserverAdapter;
+
+import java.util.concurrent.TimeUnit;
+
+import io.reactivex.Observable;
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.functions.BiFunction;
+
+public class TakeUntilExampleActivity extends TakeOperatorBaseActivity {
+
+ private static final String TAG = TakeWhileExampleActivity.class.getSimpleName();
+
+ @Override
+ protected void doSomeWork() {
+ Observable timerObservable = Observable.timer(5, TimeUnit.SECONDS);
+ timerObservable.subscribe(new ObserverAdapter() {
+ @Override
+ public void onComplete() {
+ String print = " Timer completed";
+ textView.append(print);
+ textView.append(AppConstant.LINE_SEPARATOR);
+ Log.d(TAG, print);
+ }
+ });
+
+ getStringObservable()
+ //Delay item emission by one second
+ .zipWith(Observable.interval(0, 1, TimeUnit.SECONDS), new BiFunction() {
+ @Override
+ public String apply(String s, Long aLong) throws Exception {
+ return s;
+ }
+ })
+ //Will receive the items from Strings observable until timerObservable doesn't start emitting data.
+ .takeUntil(timerObservable)
+ //We need to observe on MainThread because delay works on background thread to avoid UI blocking.
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(getObserver());
+ }
+}
diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/operators/TakeWhileExampleActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/operators/TakeWhileExampleActivity.java
new file mode 100644
index 0000000..213b779
--- /dev/null
+++ b/app/src/main/java/com/rxjava2/android/samples/ui/operators/TakeWhileExampleActivity.java
@@ -0,0 +1,35 @@
+package com.rxjava2.android.samples.ui.operators;
+
+import java.util.concurrent.TimeUnit;
+
+import io.reactivex.Observable;
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.functions.BiFunction;
+import io.reactivex.functions.Predicate;
+
+public class TakeWhileExampleActivity extends TakeOperatorBaseActivity {
+
+ private static final String TAG = TakeWhileExampleActivity.class.getSimpleName();
+
+ @Override
+ protected void doSomeWork() {
+ getStringObservable()
+ //Delay item emission by one second
+ .zipWith(Observable.interval(0, 1, TimeUnit.SECONDS), new BiFunction() {
+ @Override
+ public String apply(String s, Long aLong) throws Exception {
+ return s;
+ }
+ })
+ //Take the items until the condition is met.
+ .takeWhile(new Predicate() {
+ @Override
+ public boolean test(String s) throws Exception {
+ return !s.toLowerCase().contains("honey");
+ }
+ })
+ //We need to observe on MainThread because delay works on background thread to avoid UI blocking.
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(getObserver());
+ }
+}
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 28c6ae7..a009cc1 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,7 +1,6 @@
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;
@@ -12,6 +11,7 @@
import java.util.concurrent.TimeUnit;
+import androidx.appcompat.app.AppCompatActivity;
import io.reactivex.Observable;
import io.reactivex.ObservableEmitter;
import io.reactivex.ObservableOnSubscribe;
@@ -35,8 +35,8 @@ public class ThrottleFirstExampleActivity extends AppCompatActivity {
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 = findViewById(R.id.btn);
+ textView = findViewById(R.id.textView);
btn.setOnClickListener(new View.OnClickListener() {
@Override
@@ -67,15 +67,15 @@ private Observable getObservable() {
public void subscribe(ObservableEmitter emitter) throws Exception {
// send events with simulated time wait
Thread.sleep(0);
- emitter.onNext(1); // skip
- emitter.onNext(2); // deliver
+ emitter.onNext(1); // deliver
+ emitter.onNext(2); // skip
Thread.sleep(505);
- emitter.onNext(3); // skip
+ emitter.onNext(3); // deliver
Thread.sleep(99);
emitter.onNext(4); // skip
Thread.sleep(100);
emitter.onNext(5); // skip
- emitter.onNext(6); // deliver
+ emitter.onNext(6); // skip
Thread.sleep(305);
emitter.onNext(7); // deliver
Thread.sleep(510);
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 95b6a45..b48e208 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,7 +1,6 @@
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;
@@ -12,6 +11,7 @@
import java.util.concurrent.TimeUnit;
+import androidx.appcompat.app.AppCompatActivity;
import io.reactivex.Observable;
import io.reactivex.ObservableEmitter;
import io.reactivex.ObservableOnSubscribe;
@@ -34,8 +34,8 @@ public class ThrottleLastExampleActivity extends AppCompatActivity {
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 = findViewById(R.id.btn);
+ textView = findViewById(R.id.textView);
btn.setOnClickListener(new View.OnClickListener() {
@Override
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 17f6369..cbfa1e1 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,7 +1,6 @@
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;
@@ -12,6 +11,7 @@
import java.util.concurrent.TimeUnit;
+import androidx.appcompat.app.AppCompatActivity;
import io.reactivex.Observable;
import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
@@ -31,8 +31,8 @@ public class TimerExampleActivity extends AppCompatActivity {
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 = findViewById(R.id.btn);
+ textView = findViewById(R.id.textView);
btn.setOnClickListener(new View.OnClickListener() {
@Override
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 672d3ce..881db12 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,77 @@
-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
+package com.rxjava2.android.samples.ui.operators;
+
+import android.os.Bundle;
+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 androidx.appcompat.app.AppCompatActivity;
+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 = findViewById(R.id.btn);
+ 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) {
+ 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);
+ }
+ });
+ }
+ };
+ }
+}
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 af446f3..11cb394 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,6 @@
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;
@@ -14,6 +13,7 @@
import java.util.List;
+import androidx.appcompat.app.AppCompatActivity;
import io.reactivex.Observable;
import io.reactivex.ObservableEmitter;
import io.reactivex.ObservableOnSubscribe;
@@ -36,8 +36,8 @@ public class ZipExampleActivity extends AppCompatActivity {
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 = findViewById(R.id.btn);
+ textView = findViewById(R.id.textView);
btn.setOnClickListener(new View.OnClickListener() {
@Override
@@ -48,16 +48,16 @@ public void onClick(View view) {
}
/*
- * 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
- */
+ * 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
+ */
private void doSomeWork() {
Observable.zip(getCricketFansObservable(), getFootballFansObservable(),
new BiFunction, List, List>() {
@Override
- public List apply(List cricketFans, List footballFans) throws Exception {
+ public List apply(List cricketFans, List footballFans) {
return Utils.filterUserWhoLovesBoth(cricketFans, footballFans);
}
})
@@ -71,25 +71,25 @@ public List apply(List cricketFans, List footballFans) throws
private Observable> getCricketFansObservable() {
return Observable.create(new ObservableOnSubscribe>() {
@Override
- public void subscribe(ObservableEmitter> e) throws Exception {
+ public void subscribe(ObservableEmitter> e) {
if (!e.isDisposed()) {
e.onNext(Utils.getUserListWhoLovesCricket());
e.onComplete();
}
}
- });
+ }).subscribeOn(Schedulers.io());
}
private Observable> getFootballFansObservable() {
return Observable.create(new ObservableOnSubscribe>() {
@Override
- public void subscribe(ObservableEmitter> e) throws Exception {
+ public void subscribe(ObservableEmitter> e) {
if (!e.isDisposed()) {
e.onNext(Utils.getUserListWhoLovesFootball());
e.onComplete();
}
}
- });
+ }).subscribeOn(Schedulers.io());
}
private Observer> getObserver() {
diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/pagination/PaginationActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/pagination/PaginationActivity.java
index b68b312..e9c89a9 100644
--- a/app/src/main/java/com/rxjava2/android/samples/ui/pagination/PaginationActivity.java
+++ b/app/src/main/java/com/rxjava2/android/samples/ui/pagination/PaginationActivity.java
@@ -1,28 +1,25 @@
package com.rxjava2.android.samples.ui.pagination;
import android.os.Bundle;
-import android.support.v7.app.AppCompatActivity;
-import android.support.v7.widget.LinearLayoutManager;
-import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.ProgressBar;
-import com.rxjava2.android.samples.R;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
-import org.reactivestreams.Publisher;
+import com.rxjava2.android.samples.R;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
-import io.reactivex.Flowable;
+import io.reactivex.Single;
import io.reactivex.android.schedulers.AndroidSchedulers;
-import io.reactivex.annotations.NonNull;
import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.disposables.Disposable;
-import io.reactivex.functions.Consumer;
-import io.reactivex.functions.Function;
import io.reactivex.processors.PublishProcessor;
+import io.reactivex.schedulers.Schedulers;
/**
* Created by amitshekhar on 15/03/17.
@@ -47,10 +44,10 @@ public class PaginationActivity extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pagination);
- recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
- progressBar = (ProgressBar) findViewById(R.id.progressBar);
+ recyclerView = findViewById(R.id.recyclerView);
+ progressBar = findViewById(R.id.progressBar);
layoutManager = new LinearLayoutManager(this);
- layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
+ layoutManager.setOrientation(RecyclerView.VERTICAL);
recyclerView.setLayoutManager(layoutManager);
paginationAdapter = new PaginationAdapter();
recyclerView.setAdapter(paginationAdapter);
@@ -94,23 +91,23 @@ private void subscribeForData() {
Disposable disposable = paginator
.onBackpressureDrop()
- .concatMap(new Function>>() {
- @Override
- public Publisher> apply(@NonNull Integer page) throws Exception {
- loading = true;
- progressBar.setVisibility(View.VISIBLE);
- return dataFromNetwork(page);
- }
+ .doOnNext(page -> {
+ loading = true;
+ progressBar.setVisibility(View.VISIBLE);
})
+ .concatMapSingle(page -> dataFromNetwork(page)
+ .subscribeOn(Schedulers.io())
+ .doOnError(throwable -> {
+ // handle error
+ })
+ // continue emission in case of error also
+ .onErrorReturn(throwable -> new ArrayList<>()))
.observeOn(AndroidSchedulers.mainThread())
- .subscribe(new Consumer>() {
- @Override
- public void accept(@NonNull List items) throws Exception {
- paginationAdapter.addItems(items);
- paginationAdapter.notifyDataSetChanged();
- loading = false;
- progressBar.setVisibility(View.INVISIBLE);
- }
+ .subscribe(items -> {
+ paginationAdapter.addItems(items);
+ paginationAdapter.notifyDataSetChanged();
+ loading = false;
+ progressBar.setVisibility(View.INVISIBLE);
});
compositeDisposable.add(disposable);
@@ -122,18 +119,15 @@ public void accept(@NonNull List items) throws Exception {
/**
* Simulation of network data
*/
- private Flowable> dataFromNetwork(final int page) {
- return Flowable.just(true)
+ private Single> dataFromNetwork(final int page) {
+ return Single.just(true)
.delay(2, TimeUnit.SECONDS)
- .map(new Function>() {
- @Override
- public List apply(@NonNull Boolean value) throws Exception {
- List items = new ArrayList<>();
- for (int i = 1; i <= 10; i++) {
- items.add("Item " + (page * 10 + i));
- }
- return items;
+ .map(value -> {
+ List items = new ArrayList<>();
+ for (int i = 1; i <= 10; i++) {
+ items.add("Item " + (page * 10 + i));
}
+ return items;
});
}
}
diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/pagination/PaginationAdapter.java b/app/src/main/java/com/rxjava2/android/samples/ui/pagination/PaginationAdapter.java
index 9c9d162..ddc0402 100644
--- a/app/src/main/java/com/rxjava2/android/samples/ui/pagination/PaginationAdapter.java
+++ b/app/src/main/java/com/rxjava2/android/samples/ui/pagination/PaginationAdapter.java
@@ -1,6 +1,5 @@
package com.rxjava2.android.samples.ui.pagination;
-import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -11,6 +10,8 @@
import java.util.ArrayList;
import java.util.List;
+import androidx.recyclerview.widget.RecyclerView;
+
/**
* Created by amitshekhar on 15/03/17.
*/
diff --git a/app/src/main/java/com/rxjava2/android/samples/ui/rxbus/RxBusActivity.java b/app/src/main/java/com/rxjava2/android/samples/ui/rxbus/RxBusActivity.java
index 2911b42..a991e5e 100644
--- a/app/src/main/java/com/rxjava2/android/samples/ui/rxbus/RxBusActivity.java
+++ b/app/src/main/java/com/rxjava2/android/samples/ui/rxbus/RxBusActivity.java
@@ -1,7 +1,6 @@
package com.rxjava2.android.samples.ui.rxbus;
import android.os.Bundle;
-import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
@@ -10,6 +9,7 @@
import com.rxjava2.android.samples.R;
import com.rxjava2.android.samples.model.Events;
+import androidx.appcompat.app.AppCompatActivity;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.functions.Consumer;
@@ -36,8 +36,8 @@ protected void onDestroy() {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_rxbus);
- textView = (TextView) findViewById(R.id.textView);
- button = (Button) findViewById(R.id.button);
+ textView = findViewById(R.id.textView);
+ button = findViewById(R.id.button);
disposables.add(((MyApplication) getApplication())
.bus()
@@ -46,7 +46,7 @@ protected void onCreate(Bundle savedInstanceState) {
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer