Class DefaultSubscriber<T>
- Type Parameters:
T- the value typeExample
Flowable.range(1, 5) .subscribe(new DefaultSubscriber<Integer>() { @Override public void onStart() { System.out.println("Start!"); request(1); } @Override public void onNext(Integer t) { if (t == 3) { cancel(); } System.out.println(t); request(1); } @Override public void onError(Throwable t) { t.printStackTrace(); } @Override public void onComplete() { System.out.println("Done!"); } });
- All Implemented Interfaces:
FlowableSubscriber<T>, Flow.Subscriber<T>
invalid reference
Subscriber
request(long), cancelling via
via cancel() (both synchronously) and calls onStart()
when the subscription happens.
All pre-implemented final methods are thread-safe.
The default onStart() requests Long.MAX_VALUE by default. Override
the method to request a custom positive amount.
Note that calling request(long) from onStart() may trigger
an immediate, asynchronous emission of data to Flow.Subscriber.onNext(Object). Make sure
all initialization happens before the call to request() in onStart().
Calling request(long) inside Flow.Subscriber.onNext(Object) can happen at any time
because by design, onNext calls from upstream are non-reentrant and non-overlapping.
Use the protected cancel() to cancel the sequence from within an
onNext implementation.
Like all other consumers, DefaultSubscriber can be subscribed only once.
Any subsequent attempt to subscribe it to a new source will yield an
IllegalStateException with message "It is not allowed to subscribe with a(n) <class name> multiple times.".
Implementation of onStart(), Flow.Subscriber.onNext(Object), Flow.Subscriber.onError(Throwable)
and Flow.Subscriber.onComplete() are not allowed to throw any unchecked exceptions.
If for some reason this can't be avoided, use Flowable.safeSubscribe(org.reactivestreams.Subscriber)
instead of the standard subscribe() method.
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected final voidcancel()Cancels the upstream'sFlow.Subscription.protected voidonStart()Called once the subscription has been set on this observer; override this to perform initialization or issue an initial request.final voidImplementors of this method should make sure everything that needs to be visible inFlow.Subscriber.onNext(Object)is established before callingFlow.Subscription.request(long).protected final voidrequest(long n) Requests from the upstreamFlow.Subscription.Methods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface Flow.Subscriber
onComplete, onError, onNext
-
Constructor Details
-
DefaultSubscriber
public DefaultSubscriber()
-
-
Method Details
-
onSubscribe
Description copied from interface:FlowableSubscriberImplementors of this method should make sure everything that needs to be visible inFlow.Subscriber.onNext(Object)is established before callingFlow.Subscription.request(long). In practice this means no initialization should happen after therequest()call and additional behavior is thread safe in respect toonNext.- Specified by:
onSubscribein interfaceFlow.Subscriber<T>- Specified by:
onSubscribein interfaceFlowableSubscriber<T>
-
request
protected final void request(long n) Requests from the upstreamFlow.Subscription.- Parameters:
n- the request amount, positive
-
cancel
protected final void cancel()Cancels the upstream'sFlow.Subscription. -
onStart
protected void onStart()Called once the subscription has been set on this observer; override this to perform initialization or issue an initial request.The default implementation requests
Long.MAX_VALUE.
-