için destek OkHttp Bu Biz Retrofit bir HTTP isteğinin sonucunu önbelleğe gerekiyordu biz
public class OnErrorRetryCache<T> {
public static <T> Observable<T> from(Observable<T> source) {
return new OnErrorRetryCache<>(source).deferred;
}
private final Observable<T> deferred;
private final Semaphore singlePermit = new Semaphore(1);
private Observable<T> cache = null;
private Observable<T> inProgress = null;
private OnErrorRetryCache(Observable<T> source) {
deferred = Observable.defer(() -> createWhenObserverSubscribes(source));
}
private Observable<T> createWhenObserverSubscribes(Observable<T> source)
{
singlePermit.acquireUninterruptibly();
Observable<T> cached = cache;
if (cached != null) {
singlePermit.release();
return cached;
}
inProgress = source
.doOnCompleted(this::onSuccess)
.doOnTerminate(this::onTermination)
.replay()
.autoConnect();
return inProgress;
}
private void onSuccess() {
cache = inProgress;
}
private void onTermination() {
inProgress = null;
singlePermit.release();
}
}
ile sona erdi çözümdür. Yani bu, akılda tek bir madde yayan bir gözlemlenebilir ile yaratıldı.
HTTP isteği yürütüldükten abone gözlemci, bunun beklemek ve geliştirilmekte biri başarısız olmadıkça, iki defa isteği yürütmek değil isteseydim. Bunu yapmak için semafor, önbelleğe alınan gözlemlenebilir olanı yaratan veya döndüren bloğa tek bir erişime izin verir ve yeni bir gözlemlenebilir oluşturulduysa, o zamana kadar bekleriz. mümkün ya da değil
, POST istekleri sunucudaki verileri değiştirmek içindir, onları önbelleğe almak istediğinden emin misin? Kullanıcı – lelloman
Merhaba @lelloman ben önbellekten yanıtını alacak, sadece GET –