2017-05-12 7 views
1

私はAndroidプロジェクトでRxCacheを使用していますが、ユーザーがインターネットに接続していないときに問題があります。RxCache - 監視対象からの退去防止

サーバーからデータが返されない場合、観測対象が追い出されないようにする方法はありますか?

たとえば、ユーザーがニュースフィードをリフレッシュするたびに(リフレッシュするまで)、getRepository().getFeedPosts(tag, new EvictProvider(true));が呼び出されます。

ユーザーがsuddentlyインターネットに彼の接続を失い、再びフィードを更新する場合、データがサーバから返されません取得し、観測可能で追い出されますと(私はRxCacheビルダーにuseExpiredDataIfLoaderNotAvailable(true)を設定していますので)それがキャッシュされたバージョンを返します。 。

再度インターネットに接続しないで、ユーザーが2回目に更新すると、キャッシュされたデータは利用できません。

これを防ぐ方法はありますか?自分の質問に答える

おかげ

+0

接続が緩んでサーバーからデータを取得しようとした場合や他の種類の通知がある場合は例外がありますか?あなたはおそらく無効なデータをフィルタリングすることができます。それが無効であれば、あなたはそれを回避しません。私は何が起こっているかを見るためにもっとコードが必要になるでしょう。 –

+0

例外はありません。私が知ることから、それはRxCacheの制限です。 – cordeiro

答えて

0

は、私はそれがRxCache制限だと思います。

私はそれが可能だとは思わない:

これはRxCacheからビクターAlbertosは私に言ったものです。正確には、これは、ただスローするオブザーバブルを作成することによって、プロバイダのデータを追い出す方法です。私は、これは最適ではありません認めるが、あなたが適切にこれらのシナリオを処理し、より成熟したAPIを使用したい場合は、私は単にインターネットを追加ReactiveCache

0

私はまったく同じ問題に遭遇してしまっを使用することをあなたにお勧めしますキャッシュを無効にする必要があるかどうかを判断する可用性チェック。そのような私のキャッシュされたAPI呼び出しに伴い

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

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

これは私のアプリは今までオフラインである場合、それはキャッシュされた結果を得ることが保証されます。オンラインの場合は、サーバーに参加している人の現在のリストを常に取得します。

関連する問題