在LiveData上的观察者在removeObservers之后仍处于活动状态

问题描述 投票:0回答:1

我使用LiveData从数据库中选择信息,并将其传递给我的Activity(通过DAO,Repository和Viewmodel),具体取决于Date的时间跨度。更改时间跨度时,我想删除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()方法,尽管旧的观察者不再活动(我检查了使用[C0 ]和.hasObservers()

有什么建议吗?

java android android-livedata observers
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.