簡體   English   中英

在 for 循環中觀察實時數據

[英]Observe livedata inside a for loop

我想更新我的活動中的一個列表,該列表取決於另一個列表的數據。 從我的視圖模型的活動中觀察到數據列表。 從第一個列表中獲取數據后,我需要在此列表上運行 for 循環以獲取所需的 id 並獲取第二個列表的數據。

但是將 livedata 觀察者保持在 for 循環中會導致很多問題。 for 循環按預期運行,但 livedata 觀察者被調用的次數幾乎是 for 循環的兩倍。 這僅在第一次從 api 中獲取列表時發生。 當我第二次執行相同的操作時,列表被緩存並從數據庫中取出時,問題不會發生。 下面是問題的源代碼,

for (int i = 0; i < firstList.size(); i++) {

    final String uId = firstList.get(i).item.uid;
    final long id = firstList.get(i).item.id;
    viewModel.initAnotherItemRepository(uId, id);
    viewModel.getSecondItem().observe(this, new Observer<Resource<List<SecondItem>>>() {
        @Override
        public void onChanged(Resource<List<SecondItem>> listResource) {
            if (listResource.data != null) {
                secondItemList.addAll(listResource.data);
                if (count == firstList.size() - 1) {
                    //Do something

                }
                count = count + 1;
            }
            if (listResource.state == Resource.STATE_FAILURE) {
                showLoadingSpinner(false);
            }
        }
    }

    );
}

嘗試在 for 循環外觀察 SecondItem。 每次更新都會獲取數據

viewModel.getSecondItem().observe(this, new Observer<Resource<List<SecondItem>>>() {
    @Override
    public void onChanged(Resource<List<SecondItem>> listResource) {
        if (listResource.data != null) {
            secondItemList.addAll(listResource.data);
            if (count == firstList.size() - 1) {
                //Do something

            }
            count = count + 1;
        }
        if (listResource.state == Resource.STATE_FAILURE) {
            showLoadingSpinner(false);
        }
    }
}

);

for (int i = 0; i < firstList.size(); i++) {

    final String uId = firstList.get(i).item.uid;
    final long id = firstList.get(i).item.id;
    viewModel.initAnotherItemRepository(uId, id);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM