我在我的Android应用程序中使用rxjava来异步处理网络请求.现在我想在一段时间过后才重试失败的网络请求.
有没有办法在Observable上使用retry()但只能在一定延迟后重试?
有没有办法让Observable知道当前正在重试(而不是第一次尝试)?
我看了一下debounce()/ throttleWithTimeout(),但他们似乎做了不同的事情.
编辑:
我想我找到了一种方法,但是我会对确认这是正确的方法或其他更好的方法感兴趣.
我正在做的是:在我的Observable.OnSubscribe的call()方法中,在我调用Subscribers onError()方法之前,我只是让Thread睡眠所需的时间.所以,要每1000毫秒重试一次,我会这样做:
@Override
public void call(Subscriber<? super List<ProductNode>> subscriber) {
try {
Log.d(TAG, "trying to load all products with pid: " + pid);
subscriber.onNext(productClient.getProductNodesForParentId(pid));
subscriber.onCompleted();
} catch (Exception e) {
try {
Thread.sleep(1000);
} catch (InterruptedException e1) {
e.printStackTrace();
}
subscriber.onError(e);
}
}
Run Code Online (Sandbox Code Playgroud)
由于此方法无论如何都在IO线程上运行,因此它不会阻止UI.我能看到的唯一问题是,即使是第一个错误也会报告延迟,所以即使没有重试(),也会出现延迟.如果延迟没有在错误之后应用,而是在重试之前(但不是在第一次尝试之前,显然),我会更喜欢它.
rx-java ×1