diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 720343a..81faffd 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -12,11 +12,6 @@
android:supportsRtl="true"
android:theme="@style/AppTheme">
-
-
-
-
-
+ android:label="@string/disposable" >
+
+
+
+
+
+
+
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 9e51b3c..959b2d4 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
@@ -10,13 +10,21 @@
import com.rxjava2.android.samples.R;
import com.rxjava2.android.samples.utils.AppConstant;
+import java.io.IOException;
import java.util.concurrent.Callable;
+import java.util.concurrent.TimeUnit;
import androidx.appcompat.app.AppCompatActivity;
+import io.reactivex.Completable;
import io.reactivex.Observable;
+import io.reactivex.ObservableEmitter;
+import io.reactivex.ObservableOnSubscribe;
import io.reactivex.ObservableSource;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.CompositeDisposable;
+import io.reactivex.disposables.Disposable;
+import io.reactivex.functions.BiFunction;
+import io.reactivex.functions.Function;
import io.reactivex.observers.DisposableObserver;
import io.reactivex.schedulers.Schedulers;
@@ -55,10 +63,27 @@ protected void onDestroy() {
* Example to understand how to use disposables.
* disposables is cleared in onDestroy of this activity.
*/
+ static int number = 1;
void doSomeWork() {
- disposables.add(sampleObservable()
+ sampleObservable()
// Run on a background thread
.subscribeOn(Schedulers.io())
+ .retryWhen(new Function, ObservableSource>>() {
+ @Override
+ public ObservableSource> apply(Observable throwableObservable) throws Exception {
+ Log.i(TAG, "apply exception0=============================");
+ return throwableObservable.flatMap(new Function>() {
+ @Override
+ public ObservableSource> apply(Throwable throwable) throws Exception {
+ Log.i(TAG, "apply exception0--------------------");
+ if (throwable instanceof IOException) {
+ return Observable.error(new IOException());
+ }
+ return Observable.just(number);
+ }
+ });
+ }
+ })
// Be notified on the main thread
.observeOn(AndroidSchedulers.mainThread())
.subscribeWith(new DisposableObserver() {
@@ -73,25 +98,33 @@ public void onComplete() {
public void onError(Throwable e) {
textView.append(" onError : " + e.getMessage());
textView.append(AppConstant.LINE_SEPARATOR);
- Log.d(TAG, " onError : " + e.getMessage());
+ Log.d(TAG, " onError : " + e.getMessage() + " :" + System.currentTimeMillis());
}
@Override
public void onNext(String value) {
- textView.append(" onNext : value : " + value);
+ textView.append(" onNext : value : " + value + " :" + System.currentTimeMillis());
textView.append(AppConstant.LINE_SEPARATOR);
Log.d(TAG, " onNext value : " + value);
}
- }));
+ });
}
static Observable sampleObservable() {
- return Observable.defer(new Callable>() {
+ return Observable.create(new ObservableOnSubscribe() {
@Override
- public ObservableSource extends String> call() {
- // Do some long running operation
- SystemClock.sleep(2000);
- return Observable.just("one", "two", "three", "four", "five");
+ public void subscribe(ObservableEmitter emitter) throws Exception {
+ Log.i(TAG, "emit value:" + number);
+ Thread.sleep(1000);
+ emitter.onNext("Value-" + number);
+ if (number % 4 == 0) {
+ emitter.onError(new IllegalArgumentException("Value:" + number));
+ } else if (number % 11 == 0) {
+ emitter.onError(new IOException("ioexception"));
+ } else {
+ emitter.onError(new Exception("test"));
+ }
+ number++;
}
});
}