У меня есть этот код, чтобы подключиться к серверу xmpp. Все работает отлично, за исключением последнего attemp, чтобы попытаться подключиться, onError не вызывается на абонента, и, согласно документу, он должен. Что я делаю не так?rxjava android retryКогда не вызывается onError при последней попытке
@Override
public void connect(final AbstractXMPPConnection connection) {
Observable.<AbstractXMPPConnection>create(subscriber -> {
try {
connection.connect();
} catch (SmackException | IOException | XMPPException e) {
e.printStackTrace();
subscriber.onError(e);
}
})
.retryWhen(attempts -> attempts.zipWith(Observable.range(1, 4), (n, i) -> i).flatMap(i -> {
return Observable.timer(i, TimeUnit.SECONDS);
}))
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<AbstractXMPPConnection>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
if (callback != null)
callback.onFailedConnecting();
}
@Override
public void onNext(AbstractXMPPConnection conn) {
if (callback != null)
callback.onConnected();
}
});
}
TLDR: на последнюю попытку, общественный недействительный OnError следует назвать и не
Я думаю, вам нужно flatMap в ошибке() наблюдаемый для retryWhen, чтобы бросить. – akarnokd