У меня есть уровень данных в моем приложении, который поддерживается службой модернизации. (Пока есть только постоянство по сети. Когда я продвинусь дальше, я добавлю автономное локальное хранилище)
Retrofit возвращает мне Observable<List<Item>>
, когда я звоню на сервер. Это хорошо работает. В моем подписчике я получаю список при подписке, а затем могу заполнить свой пользовательский интерфейс файлом Items
.
Проблема, с которой я сталкиваюсь, заключается в следующем: если список изменен (каким-то внешним механизмом), как я могу сделать наблюдаемый повторный запрос к службе модернизации и создать новый список элементов. Я буду знать, что данные устарели, но не знаю, как инициировать повторный запрос.
Вот урезанная версия моего 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;
}
}