web-dev-qa-db-fra.com

Gérer la réponse vide avec retrofit et rxjava 2.x

Lors de l'utilisation de rxjava 1.x, je retournais Observable<Void> pour gérer la réponse vide de la modification:

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

Mais puisque rxjava 2.x n'émettra rien avec Void y a-t-il une bonne pratique pour gérer ces réponses vides?

21
Samuel Eminet

Completable a été conçu pour de tels cas. Il est disponible depuis RxJava 1.1.1. De la documentation officielle:

Représente un calcul différé sans aucune valeur mais uniquement une indication de complétion ou d'exception. La classe suit un modèle d'événement similaire à Reactive-Streams: onSubscribe (onError | onComplete)?

Il suffit donc de changer le type de retour de votre méthode:

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

Et réécrivez votre abonné, par exemple:

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

Une autre solution est:

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