Interface SingleEmitter<T>

  • Type Parameters:
    T - the value type to emit
    All Known Implementing Classes:
    SingleCreate.Emitter

    public interface SingleEmitter<@NonNull T>
    Abstraction over an RxJava SingleObserver that allows associating a resource with it.

    All methods are safe to call from multiple threads, but note that there is no guarantee whose terminal event will win and get delivered to the downstream.

    Calling onSuccess(Object) multiple times has no effect. Calling onError(Throwable) multiple times or after onSuccess will route the exception into the global error handler via RxJavaPlugins.onError(Throwable).

    The emitter allows the registration of a single resource, in the form of a Disposable or Cancellable via setDisposable(Disposable) or setCancellable(Cancellable) respectively. The emitter implementations will dispose/cancel this instance when the downstream cancels the flow or after the event generator logic calls onSuccess(Object), onError(Throwable), or when tryOnError(Throwable) succeeds.

    Only one Disposable or Cancellable object can be associated with the emitter at a time. Calling either set method will dispose/cancel any previous object. If there is a need for handling multiple resources, one can create a CompositeDisposable and associate that with the emitter instead.

    The Cancellable is logically equivalent to Disposable but allows using cleanup logic that can throw a checked exception (such as many close() methods on Java IO components). Since the release of resources happens after the terminal events have been delivered or the sequence gets cancelled, exceptions throw within Cancellable are routed to the global error handler via RxJavaPlugins.onError(Throwable).

    • Method Detail

      • onSuccess

        void onSuccess​(@NonNull
                       @NonNull T t)
        Signal a success value.
        Parameters:
        t - the value, not null
      • onError

        void onError​(@NonNull
                     @NonNull java.lang.Throwable t)
        Signal an exception.
        Parameters:
        t - the exception, not null
      • setDisposable

        void setDisposable​(@Nullable
                           @Nullable Disposable d)
        Sets a Disposable on this emitter; any previous Disposable or Cancellable will be disposed/cancelled.

        This method is thread-safe.

        Parameters:
        d - the Disposable, null is allowed
      • setCancellable

        void setCancellable​(@Nullable
                            @Nullable Cancellable c)
        Sets a Cancellable on this emitter; any previous Disposable or Cancellable will be disposed/cancelled.

        This method is thread-safe.

        Parameters:
        c - the Cancellable resource, null is allowed
      • isDisposed

        boolean isDisposed()
        Returns true if the downstream disposed the sequence or the emitter was terminated via onSuccess(Object), onError(Throwable), or a successful tryOnError(Throwable).

        This method is thread-safe.

        Returns:
        true if the downstream disposed the sequence or the emitter was terminated
      • tryOnError

        boolean tryOnError​(@NonNull
                           @NonNull java.lang.Throwable t)
        Attempts to emit the specified Throwable error if the downstream hasn't cancelled the sequence or is otherwise terminated, returning false if the emission is not allowed to happen due to lifecycle restrictions.

        Unlike onError(Throwable), the RxjavaPlugins.onError is not called if the error could not be delivered.

        History: 2.1.1 - experimental

        Parameters:
        t - the throwable error to signal if possible
        Returns:
        true if successful, false if the downstream is not able to accept further events
        Since:
        2.2