Ich habe dieses Thema in dem Viewmodel:Warum onCompleted wird in diesem Code nicht aufgerufen?
private PublishSubject<String> articleSubject;
public Observable<Article> newArticleSubject() {
articleSubject = PublishSubject.create();
return articleSubject.flatMap(new Func1<String, Observable<Article>>() {
@Override
public Observable<Article> call(String articleId) {
return dataModel.getArticleById(articleId).subscribeOn(Schedulers.newThread());
}
});
}
ich die Ansicht wie folgt zu binden:
viewModel.newArticleSubject()
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new ArticleSubscriber());
Und das ist mein Teilnehmer:
private class ArticleSubscriber extends Subscriber<Article> {
@Override
public void onCompleted() {
Log.d("test", "This is not ever printed");
}
@Override
public void onError(Throwable e) {
//do stuff
}
@Override
public void onNext(Article article) {
//do stuff
}
}
onCompleted
nie genannt wird, aber onError
und onNext
sind. Warum? Inside dataModel.getArticleById(articleId)
, subscriber.onCompleted();
heißt.
Wenn 'onError' aufgerufen wird,' onComplete' wird * nicht * aufgerufen werden; das ist von Entwurf. –
Ich meine, falls es scheitert, wird onError aufgerufen. Aber wenn alles in Ordnung ist, ist onCompleted nicht –
Da es sich um ein 'PublishSubject' handelt, ruft jemand onComplete nicht auf dem' articleSubject' auf. –