J'ai une couche de données dans mon application qui est soutenue par un service de mise à niveau. (Jusqu'à présent, il n'y a que la persistance sur le réseau.Quand je suis en développement, j'ajouterai le premier stockage local hors ligne)Requérir et mettre à jour des abonnés avec RxJava2
Retrofit me renvoie un Observable<List<Item>>
lorsque j'appelle le serveur. Cela fonctionne bien. Dans mon abonné, je reçois la liste quand je m'abonne et peux alors remplir mon interface avec le Items
.
Le problème que je suis est: Si la liste est modifiée (par un mécanisme externe) comment puis-je rendre l'observable re-interroger le service de rénovation et d'émettre une nouvelle liste d'éléments. I serait être conscient que les données sont périmées, mais je ne suis pas sûr de savoir comment lancer une nouvelle requête.
Voici une version épurée de mon DataManager
class DataManager {
// Retrofit
RetrofitItemsService itemsService;
// The observalble provided by retrofit
Observable<List<Item>> itemsObservable;
//ctor
public DataManager(RetrofitItemsService itemsService) {
this.itemsService = itemsService;
}
/* Creates and stores an observable if one has not been created yet.
* Returns the observable so that it can be subscribed to by the function caller
*/
public Observable<List<Item>> getItems(){
if(itemsObservable == null){
itemsObservable = itemsService.getItems();
}
return itemsObservable;
}
/* Adds a new Item to the list.
*/
public Completable addItem(Item item){
Completable call = itemsService.addItem(item);
call.subscribe(()->{
/*
< < <Here> > >
If someone has previously called getItems before this item was added, they now have stale data.
How can I call something like:
itemsObservable.refreshAllSubscribers()
*/
});
return call;
}
}