web-dev-qa-db-fra.com

Retrofit 2 + RxJava annuler / désinscrire

J'effectue une demande réseau où j'envoie des fichiers et un message. Je voudrais avoir une option pour annuler la demande en cours. J'ai trouvé deux questions similaires et les deux suggèrent que observable.subscribe(Observer) renvoie un objet d'abonnement qui a la méthode unsubscribe().

Voici le premier

Et le second

Dans mon cas, j'utilise observable.subscribe(Observer) qui est nul. Voici mon code:

Observable<MessengerRaw> observable = mModel.sendMessage(message, companion, description, multiParts);
        observable.subscribe(new Observer<MessengerRaw>() {
            @Override
            public void onSubscribe(Disposable d) {

            }

            @Override
            public void onNext(MessengerRaw value) {
                if (getView() != null) {
                    ((MessengerActivity) getView()).resetMessegeView();
                    ((MessengerActivity) getView()).updateMessageList();
                }
            }

            @Override
            public void onError(Throwable e) {
                getData().remove(0);
                if (getView() != null) {
                    ((MessengerActivity) getView()).updateMessageList();
                }
            }

            @Override
            public void onComplete() {
                hideProgress();
            }
        });

Alors, comment puis-je me désinscrire/annuler ma demande? Merci.

16
Sermilion

Dans RxJava2, vous pouvez obtenir un objet jetable dans la méthode de rappel onSubscribe d'oserver, que vous pouvez utiliser pour supprimer l'abonnement.

15
Arnav Rao

Dans RXJava, vous devez utiliser les abonnements pour vous désabonner

private Subscription mSubscription;

/.../

Observable<MessengerRaw> observable = mModel.sendMessage(message, companion, description, multiParts);
Subscription subscription = observable.subscribe(new Observer<MessengerRaw>() {/.../});

Lorsque vous souhaitez vous désinscrire, vous pouvez appeler

if(!subscription.isUnsubscribed()){
    subscription.unsubscribe();
}

Dans RXJava 2 observable.subscribe(new Observer<MessengerRaw>() {/.../}); renvoie un objet jetable, vous pouvez appeler dispose ();

3
Gevork Safaryan