2016-08-19 101 views
6

哪種是最佳存儲翻新 POST請求緩存?Android翻新POST請求緩存

我將存儲響應並在用戶離線時使用該響應。我被引用這個鏈接。
1)Can Retrofit with OKHttp use cache data when offline
2)Cache POST requests with OkHttp

但在這個環節上的緩存機制的工作只有GET方法。
- 使用改造可以將緩存存儲在發佈請求中?
- 任何庫都可以處理網絡緩存嗎?

感謝

+1

可能與否,POST請求是爲了更改服務器中的數據,您確定要緩存它們嗎? – lelloman

+0

您好@lelloman在我的情況下,我將在用戶離線時獲得緩存響應 –

回答

3

OkHttp有文件緩存

+0

您能否提供一些代碼以獲取更多詳細信息 –

+0

OKHttp不支持緩存POST請求,只有GET – galaxigirl

0

支持這是我們結束了

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(); 
    } 
} 

的解決方案,我們需要從緩存改造HTTP請求的結果。所以這是創造出來的,其中一個可觀察的事物發出一個單一的項目。

如果觀察者在HTTP請求執行時訂閱,我們希望它等待並且不執行兩次請求,除非正在進行的請求失敗。爲此,信號量允許單次訪問創建或返回緩存的觀察值的塊,並且如果創建了新的觀察值,我們將等待直到該結束。