gpt4 book ai didi

java - 删除观察者后,LiveData 上的观察者仍然处于 Activity 状态

转载 作者:行者123 更新时间:2023-12-01 18:29:12 25 4
gpt4 key购买 nike

我使用 LiveData 从数据库中选择信息,将其传递到依赖于日期时间跨度的 Activity (通过 DAO、存储库和 View 模型)。当我更改时间跨度时,我想删除 LiveData 上的旧观察者并为新时间跨度创建新观察者。

private void addStepsObserver(Date[] timeSpan) {
homeViewModel.getSteps(timeSpan[0], timeSpan[1]).observe(this, new Observer<Integer>() {
@Override
public void onChanged(Integer integer) {
if (integer == null) {
return;
}
Log.i(StepRepository.TAG, "onChanged for getSteps().observe called " + integer);
updateStepCounter(integer);
}
});
}

private void removeObservers() {
Date[] timeSpan = homeViewModel.getCurrentTimespan();
homeViewModel.getSteps(timeSpan[0], timeSpan[1]).removeObservers(this);
Log.i(TAG, "remove Observers " + timeSpan[0] + " " + timeSpan[1]);
}

但是,在我调用 removeObservers() ,然后调用 addStepsObservers(timespan) (时间跨度是与之前不同的时间戳)之后,方法 updateStepCounter() > 由两个观察者调用,尽管旧观察者不再处于 Activity 状态(我使用 .hasObservers().hasActiveObservers() 检查过)

有什么建议吗?

最佳答案

homeViewModel.getSteps() - 为每次调用返回一个新的LiveData?因此,这意味着您从另一个新创建的 LiveData 中删除了观察者。您必须保留对在 addStepsObserver 步骤中创建的 LiveData 对象的引用,并且在 removeObservers 步骤中您应该从中删除观察者。

关于java - 删除观察者后,LiveData 上的观察者仍然处于 Activity 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60189165/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com