gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 19:10:01 28 4
gpt4 key购买 nike

我想更新我的 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/

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