java - 观察 for 循环内的实时数据

标签 java android android-livedata android-jetpack

我想更新我的 Activity 中依赖于另一个列表的数据的列表。这两个数据列表都是从我的 View 模型的 Activity 中观察到的。从第一个列表获取数据后,我需要在此列表上运行 for 循环以获取所需的 id 并获取第二个列表的数据。

但是将 livedata 观察器保留在 for 循环中会导致很多问题。 for 循环按预期运行,但实时数据观察器的调用量几乎是 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);
}

关于java - 观察 for 循环内的实时数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59491072/

相关文章:

android蓝牙连接错误(读取失败的套接字可能会关闭或超时)

android - 无效的 APK 文件

android - ViewModel 值更改时 UI 未更新

java - Safari 中的 Selenium Java - 切换到新选项卡不起作用

java - 将 txt 文件添加到可运行的 JAR 文件

android - 磁盘缓存中的加密 Picasso android

android - 没有 LiveData 的房间

android - 让每个观察者在订阅/观察时只接收 *new* LiveData

java - 从 Android 上的 createMime 值数据读取 NFC

java - 如何将值从一个类的 onOptionsItemSelected 方法传递到另一个类