Search code examples
androidrx-javarx-java2

Handle empty response with retrofit and rxjava 2.x


When using rxjava 1.x i used to return Observable<Void> to handle empty response from retrofit:

@POST( "login" )
Observable<Void> getToken( @Header( "Authorization" ) String authorization,
                                       @Header( "username" ) String username,
                                       @Header( "password" ) String password );

But since rxjava 2.x won't emit anything with Void is there any good practice to handle those empty responses?


Solution

  • Completable was designed for such cases. It available since RxJava 1.1.1. From the official docs:

    Represents a deferred computation without any value but only indication for completion or exception. The class follows a similar event pattern as Reactive-Streams: onSubscribe (onError|onComplete)?

    So just change your method's return type:

    @POST("login")
    Completable getToken(@Header("Authorization") String authorization,
                         @Header("username")      String username,
                         @Header("password")      String password);
    

    And rewrite your subscriber, e.g.:

    apiManager.getToken(auth, name, pass)
        ...
        .subscribe(() -> {
            //success
        }, exception -> {
            //error
        });