2015-12-14 4 views
2

J'utilise l'observable suivant pour appeler api de retrofit puis enregistrez la réponse dans le fichier de cache:rxJava, Actualiser les données api périodiquement

@Override public Observable<StoryCollectionEntity> storyEntityList(final int page) { 

     return this.restApi.storyCollection(id, page) 
     .doOnNext(saveStoryCollectionToCacheAction)   
    .onErrorResumeNext(CloudNewsDataStore.this.mNewsCache.getStories(page)); 
      } 

Cela fonctionne comme prévu. Ma question est la suivante: comment puis-je faire que cet observateur retourne réponse api périodiquement?

disons, l'utilisateur veut actualiser les données toutes les 5 minutes

+1

Eh bien, vous voudrez peut-être pas aussi rafraîchissant les données toutes les 5 minutes = drain de la batterie et donc la perte d'utilisateurs. Vous voulez synchroniser intelligemment, utilisez un SyncAdapter. Android OS a des optimisations lourdes pour la synchronisation des données en utilisant un SyncAdapter et il n'est pas trop difficile de configurer –

Répondre

2

L'opérateur interval() émettra un élément à un intervalle de temps donné.

Vous pouvez l'utiliser pour déclencher des événements périodiques comme ceci:

Observable.interval(5, TimeUnit.MINUTES) 
      .flatMap(count -> this.restApi.storeCollection(id, page)) 
      // etc. 
+0

qu'en est-il de déclaration de retour? Devrait-il être retourné Observable.interval (5, TimeUnit.MINUTES) ... – Fshamri

+0

Si vous voulez retourner cet Observable, alors oui. Mon exemple n'était pas nécessairement destiné à être déposé directement dans votre code, mais à être un exemple que n'importe qui pourrait utiliser dans son code. –

+0

est là un exemple détaillé .. plz – Fshamri