gpt4 book ai didi

android - 实时数据返回旧值,onChanged 触发多次

转载 作者:行者123 更新时间:2023-11-29 23:18:14 24 4
gpt4 key购买 nike

我正在使用实时数据来更新 Activity 的某些 View 。该 View 包含问题编号,包括总问题编号和已回答问题编号 例如:2/10(已回答/总计)可以使用 Actor 过滤问题,如果没有选择 Actor ,那么它将列出所有问题(将问题总数视为 100),然后如果我选择任何 Actor (如开发人员、人力资源),那么问题总数将减少到另一个值小于 100(比如 20)使用dao方法返回总计数

 @Query("SELECT COUNT(actor) FROM questions WHERE actor IN (:actors)")
LiveData<Integer> getNumberOfQuestions(String[] actors);

这里的String[] actors是选中的actor列表

使用观察者

questionsViewModel.getTotalQuestionCount(mCheckedActorList).observe(this, new Observer<Integer>() {
@Override
public void onChanged(@Nullable Integer countTotal) {
if (countTotal != null)
mTotalCount = String.valueOf(countTotal);
if (mAnswerCount != null && mTotalCount != null)
mAllQuestionAnswered.setText(mAnswerCount.concat("/").concat(mTotalCount));

}
});

我正在观察计数,但请考虑场景

  1. 未应用过滤器(未选择 Actor ,计数 =100)
  2. 参与者开发者被选中(计数 = 20)

onchanged 在第一种情况下返回 100,在第二种情况下它返回 100 和 20 我只想要当前值,即 20 如何解决这个问题?我做错了什么?

enter image description here

在 View 模型中

 public LiveData<Integer> getTotalQuestionCount(List<String> actorsList) {
if (actorsList != null && actorsList.size() > 0) {
String[] actorArray = new String[actorsList.size()];
actorArray = actorsList.toArray(actorArray);
return questionsRepository.getTotalCount(actorArray);

} else {
return questionsRepository.getTotalCount();
}
}

最佳答案

很难知道整个场景,但我有一些想法

当您发出新请求并更改 Actor 时,您会加倍(甚至可能更多)实时请求。

因此,

  • 针对所有值的实时查询
  • 实时查询是指定参与者的值
  • 以及可能的其他实时查询

在发出新的实时请求之前,您可以清除之前的请求,或者您可以使用 List 而不是 LiveData。

清除实时查询观察者的示例用法,

持有LiveData和Observer

Observer<Integer> observerOfLiveQuery = new Observer<Integer>() {
@Override
public void onChanged(@Nullable Integer countTotal) {
if (countTotal != null)
mTotalCount = String.valueOf(countTotal);
if (mAnswerCount != null && mTotalCount != null)
mAllQuestionAnswered.setText(mAnswerCount.concat("/").concat(mTotalCount));
}
}

LiveData<Intener> firstLiveQuery = getTotalQuestionCount(...)
firstLiveQuery.observe(this, observerOfLiveQuery)

LiveData<Intener> secondLiveQuery = getTotalQuestionCount(...)
firstLiveQuery.removeObserver(observerOfLiveQuery)
secondLiveQuery.observe(this, observerOfLiveQuery)

关于android - 实时数据返回旧值,onChanged 触发多次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54901756/

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