Ağ isteklerini eşzamansız olarak işlemek için Android uygulamamda rxjava kullanıyorum. Şimdi, başarısız olan bir ağ isteğini yalnızca belirli bir süre geçtikten sonra yeniden denemek istiyorum.
Bir Gözlemlenebilir'de retry () kullanmanın ancak belirli bir gecikmeden sonra yeniden denemenin bir yolu var mı?
Gözlemlenebilir'in şu anda yeniden denenmekte olduğunu bildirmenin bir yolu var mı (ilk kez denenmenin aksine)?
Debounce () / throttleWithTimeout () 'a baktım ama farklı bir şey yapıyor gibi görünüyorlar.
Düzenle:
Sanırım bunu yapmanın bir yolunu buldum, ancak bunun doğru bir yol olduğunu ya da başka, daha iyi yollar olduğunu doğrulamakla ilgileniyorum.
Yaptığım şey şudur: Observable.OnSubscribe'ımın call () yönteminde, Subscribers onError () yöntemini çağırmadan önce, Thread'ın istenen süre boyunca uyumasına izin veriyorum. Yani, her 1000 milisaniyede bir yeniden denemek için şuna benzer bir şey yapıyorum:
@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);
}
}
Bu yöntem bir GÇ iş parçacığında çalıştığından, kullanıcı arabirimini engellemez. Görebildiğim tek sorun, ilk hatanın bile gecikmeli olarak bildirilmesidir, bu nedenle, yeniden deneme () olmasa bile gecikme vardır. Gecikme uygulanmadı ben daha iyi istiyorum sonra bir hata ancak bunun yerine önce (besbelli, ama ilk denemede öncesi) yeniden deneme.
Error:(73, 20) error: incompatible types: RetryWithDelay cannot be converted to Func1<? super Observable<? extends Throwable>,? extends Observable<?>>