2017-05-12 25 views
1

我在我的Android項目上使用RxCache,並且當用戶沒有互聯網連接時出現問題。RxCache - 防止可觀察到的被驅逐

如果沒有數據從服務器返回,是否有辦法防止可觀察數據被驅逐?

例如,每次用戶刷新消息饋送(拉動刷新)getRepository().getFeedPosts(tag, new EvictProvider(true));被調用。

如果用戶突然失去與互聯網的連接並再次刷新feed,服務器沒有返回任何數據,則observable被驅逐並返回緩存版本(因爲我在RxCache構建器上設置了useExpiredDataIfLoaderNotAvailable(true)) 。

再次沒有互聯網連接,如果用戶第二次刷新,則沒有緩存的數據可用。

有沒有辦法來防止這種情況發生?

感謝

+0

如果您失去連接並嘗試從服務器獲取數據或有任何其他類型的指示,是否會有異常?你可能會過濾無效數據。如果它是無效的,你不會逃避它。我需要更多的代碼才能看到正在發生的事情。 –

+0

沒有例外。從我可以告訴的是,這是一個RxCache限制。 – cordeiro

回答

0

回答我的問題,我想這是一個RxCache限制。

這是從RxCache維克多Albertos告訴我:

我不認爲這是可能的。確切地說,這是通過創建剛剛拋出的observable來驅逐某個提供者的數據的方式。我承認這是不是最佳的,但如果你想使用更成熟的API,它正確處理這些情況,我建議你使用ReactiveCache

0

我遇到了相同問題,最終只需添加一個網絡可用性檢查以確定緩存是否應該失效。

public Boolean isOnline() { 
    MyApplication application = MyApplication.sharedApplication(); 
    ConnectivityManager cm = 
      (ConnectivityManager) application.getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo netInfo = cm.getActiveNetworkInfo(); 
    return netInfo != null && netInfo.isConnectedOrConnecting(); 
} 

在我的緩存API調用一起,像這樣:

public static Single<List<People>> getPeopleAttending() { 
    PartyManager manager = sharedManager(); 
    manager.cacheProvider.getPeopleAttending(manager.partyService.getAttending("Party/PeopleAttending"), new EvictProvider(isOnline())); 
} 

這確保瞭如果我的應用程序是有史以來下線,它會得到緩存的結果。如果它在線,它將始終從服務器獲取當前參加派對的人員列表。