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 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++; } }); }