【发布时间】:2021-10-11 22:07:59
【问题描述】:
我的存储库类中有一个LiveData,它在活动(我正在使用 MVVM 架构)中被观察(当然是通过视图模型),当单击按钮时,使用返回 RxJava2 的 Retrofit 调用 API Observable(不是 Call)因为我需要 RxJava2 将 2 个 api 调用压缩在一起。然后应将来自 API 的请求数据设置为 LiveData 的新值。这是从 Retrofit API 调用创建的 Observable:
Observable.zip(retrofitService.getData(), retrofitService.getData2(),
new BiFunction<List<float[]>, List<float[]>, List<Object>>() {
@NonNull
@Override
public List<Object> apply(@NonNull List<float[]> floats, @NonNull List<float[]> floats2) throws Exception {
// combine the two different api calls
List<Object> newlist = ...
return newList;
}
});
当然,如果在我的应用程序中单击另一个按钮,则会调用另一个 API。
现在我的问题是,如何从 Observable 更新 LiveData 的值(例如上面给出的值)。我知道LiveDataReactiveStreams.fromPublisher() 方法,但我不确定如何在这里应用它。那么唯一的方法是订阅 observable 然后在 livedata 上调用 postvalue 吗?
Observable.zip(retrofitService.getData(), retrofitService.getData2(),
new BiFunction<List<float[]>, List<float[]>, List<Object>>() {
@NonNull
@Override
public List<Object> apply(@NonNull List<float[]> floats, @NonNull List<float[]> floats2) throws Exception {
// combine the two different api calls
List<Object> newlist = ...
return newList;
}
}).subscribe(list -> repository.updateLiveData(list));
对于含糊的解释,我深表歉意,我很难表达这个问题。
【问题讨论】:
标签: java android mvvm rx-java android-livedata