2015-11-12 1 views
10

quelqu'un peut me expliquer pourquoi le code comme ceci:Pourquoi RxJava avec Rattrapage sur Android doOnError() ne fonctionne pas, mais l'abonné onError ne

networApi.getList() 
      .subscribeOn(Schedulers.newThread()) 
      .observeOn(AndroidSchedulers.mainThread()) 
      .doOnError(throwable -> { 
       throwable.getMessage(); 
      }) 
      .doOnNext(list -> { 
       coursesView.populateRecyclerView(list); 
       courseList = (List<Course>) courses; 
      }).subscribe(); 

S'il n'y a pas Internet qui entre dans doOnError mais jette encore si l'application descend, mais le code comme ceci:

networkApi.getList() 
      .subscribeOn(Schedulers.newThread()) 
      .observeOn(AndroidSchedulers.mainThread()) 
      .subscribe(new Subscriber<List<? extends Course>>() { 
       @Override 
       public void onCompleted() { 

       } 

       @Override 
       public void onError(Throwable e) { 
        e.getMessage(); 
       } 

       @Override 
       public void onNext(List<? extends Course> list) { 
        coursesView.populateRecyclerView(list); 
        courseList = (List<Course>) list; 
       } 
      }); 

travail comment je pense, cela signifie quand il n'y a pas de connexion Internet, il ne fait rien

acclamations Wojtek

Répondre

22

Fondamentalement, doOnError ne poignée l'erreur, dans le sens où il ne consomme il. C'est juste fait quelque chose avec, connectez-vous, par exemple. (La même chose est vraie pour doOnNext - il ne consomme pas non plus l'article et l'article finit toujours dans onNext du Subscriber).

L'erreur est toujours envoyé en bas de la chaîne et se retrouverait toujours dans le onError de votre Subscriber.

Je suis assez certain que votre application plante avec un OnErrorNotImplementedException et c'est parce que vous n'avez aucun Subscriber du tout et donc aucune méthode onError.

+0

Vous êtes totalement vrai. Merci d'avoir éclairci ça. –

+0

@ david.mihola existe-t-il un moyen de gérer les codes d'état HTTP onError avec retrofit beta 2? – halfred

+1

ahh trouvé la réponse déjà ici: http://stackoverflow.com/a/33075870/1438480 – halfred