gpt4 book ai didi

android - rxjava android retryWhen 在上次尝试时没有调用 onError

转载 作者:行者123 更新时间:2023-11-30 02:04:37 24 4
gpt4 key购买 nike

我有这段代码可以尝试连接到 xmpp 服务器。一切正常,除了最后一次尝试连接时,没有在订阅者上调用 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:在最后一次尝试中,应该调用 public void onError 而不是

最佳答案

你有:

.retryWhen(attempts -> attempts.zipWith(Observable.range(1, 4), (n, i) -> i).flatMap(i -> {        
return Observable.timer(i, TimeUnit.SECONDS);
}))

此代码永远不会发出错误,因此它将以指数方式(计时器)尝试重试,但永远不会失败。因此永远不会调用 onError()。

如果您想捕获错误,您需要使用显式 Observable.error() 从 retryWhen 传递错误,或者删除 retryWhen 部分。 :)

关于android - rxjava android retryWhen 在上次尝试时没有调用 onError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30891030/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com