私は、レトロフィットサービスを利用しているアプリケーションにデータレイヤーを持っています。 (これまでのところ、ネットワーク上でのみ永続性があります。さらに開発を進めると、オフラインで最初にローカルストレージを追加します)RxJava2を使用した購読者の再クエリーと更新
Retrofitはサーバに電話をかけたときにObservable<List<Item>>
を返します。これはうまくいく。私の購読者では、購読するとリストを受け取り、Items
で自分のUIを設定することができます。
私が抱えている問題は、リストが(一部の外部メカニズムによって)変更されている場合、観察可能な再クエリサービスを改造してアイテムの新しいリストを出す方法です。私は、データが古くなっていることに気づくでしょうが、私はどのように再クエリを開始するかわかりません。ここで
は、あなたがここに戦っている問題は、ホットと冷たい観察可能な違いである私の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;
}
}