【发布时间】:2017-05-04 19:56:19
【问题描述】:
我的应用中有一个由改造服务支持的数据层。 (到目前为止,只有网络上的持久性。当我进一步开发时,我将添加离线优先的本地存储)
当我调用服务器时,Retrofit 会向我返回 Observable<List<Item>>。这很好用。在我的订阅者中,我在订阅时会收到列表,然后可以使用 Items 填充我的 UI。
我遇到的问题是:如果列表被修改(通过某种外部机制),我如何让 observable 重新查询改造服务并发出新的项目列表。我会知道数据已过时,但我不确定如何启动重新查询。
这是我的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;
}
}
【问题讨论】:
标签: android retrofit rx-java reactive-programming rx-java2