【发布时间】:2020-05-14 18:36:46
【问题描述】:
我想对不同来源使用相同的 LiveData。一个来自 API 调用,它是可观察的,另一个来自数据库,它是 LiveData。我希望能够做这样的事情:
private LiveData<List<Items>> items = new MutableLiveData<>();
// this one comes from an API and it's an observable
public void onApiItemsSelected(String name) {
Disposable disposable = repository.getItemsFromApi(name)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(itemsList -> {
items.setValue(itemsList);
});
compositeDisposable.add(disposable);
}
// this one comes from the database and it's a livedata that I want to transform first
public void onDatabaseItemsSelected() {
items = Transformations.map(repository.getItemsFromdatabase(), itemsList -> {
List<Items> finalItemsList = new ArrayList<>();
for (Item item : itemsList) {
finalItemsList.add(itemsList.toSomething());
}
return finalItemsList;
});
}
问题是 Transformation.map 总是返回一个 LiveData 并且为了使 items.setValue(itemsList) 项目需要是一个 MutableLiveData。我尝试使用 MediatorLiveData,但它调用了两个源并混合了所有内容。这不是我在这里需要的。我需要一个来源或另一个。有可能吗?
【问题讨论】:
-
我不确定你想做什么。您想合并这些结果还是想访问最新的结果(例如最新的数据库或 api)?
-
如果用户单击调用 onApiItemsSelected 的按钮,我想显示 API 中的值,如果他单击 onDatabaseItemsSelected,我想显示数据库中的值。我不希望它们结合在一起。我想显示其中一个。它们是相同的对象,将显示在同一个列表中。只有来源不同。
-
我会尝试发布代码来提供帮助。
-
为什么不总是将 API 中的数据保存到 DB 中,而只显示 DB 中的数据?
标签: android android-livedata android-architecture-components mutablelivedata mediatorlivedata