如何解决我需要对分别从单独的SQL查询返回的两个livedata对象执行算术运算减法
我是编码和移动应用程序开发的相对新手,但是我很热心,热情并且想学习!
这是我提出的第一个问题,如果我以询问的方式破坏礼节,请事先道歉。
我正在编写一个用于跟踪游泳者个人最佳时间的应用程序,我几乎已经完成了使用Room来查询sql db的编码,并使用正常的dao,存储库和viewmodel体系结构来返回游泳时间和资格时间。最后一步是从比赛资格时间中减去游泳者的比赛时间。这就是我在努力的地方!
最初,我尝试如下嵌套livedata对象,但是在内部进行算术运算时,无法访问外部livedata。
**Code snippet:**
swimMeetViewModel.getQualificationTimes(queryQualTimes(scSwimDistance,scHKTable,swimMeetViewModel.getAgeGroup())).observe(getViewLifecycleOwner(),new Observer<List<String>>() {
@Override
public void onChanged(@Nullable List<String> qualificationTime) {
freeQual = qualificationTime.get(0);
free_qual.setText(freeQual);
swimMeetViewModel.getFastTimes(queryFastTimes(swimMeetTable,AppConstants.free,scSwimDistance,SCMEET_TRUE)).observe(getViewLifecycleOwner(),new Observer<List<String>>() {
@Override
public void onChanged(@Nullable List<String> fastTime) {
freeTime = fastTime.get(0);
free_time.setText(freeTime);
}
freeDelta.setValue(toMMSS(toMilli(freeTime) - toMilli(freeQual)));
});
}
});
在SO上进行了一些深入研究之后,我遇到了以下问题,该问题表明mediatorlivedata是我处理多个livedata源所需的工具。但是,我似乎无法使用建议的代码来解决问题。
Livedata mathematical operations
我们将非常感谢您提供任何有助于理解此代码并解释mediatorlivedata如何工作的帮助。不幸的是,Android Developer Reference在这方面不是很有帮助。
预先感谢
ilh
解决方法
我也是初学者,所以我的回答可能有错误,但我想提出这个建议。 “假设qualifiedTime.get(0) 和fastTime.get(0) 返回一个Int”
swimMeetViewModel.getQualificationTimes(queryQualTimes(scSwimDistance,scHKTable,swimMeetViewModel.getAgeGroup())).observe(getViewLifecycleOwner(),new Observer<List<String>>() {
@Override
public void onChanged(@Nullable List<String> qualificationTime) {
freeQual = qualificationTime.get(0);
free_qual.setText(freeQual);
try{
freeDelta.setValue(toMMSS(toMilli(Integer.parseInt(free_time.getText())) - toMilli(freeQual)));
} catch(NumberFormatException e){}
}
});
swimMeetViewModel.getFastTimes(queryFastTimes(swimMeetTable,AppConstants.free,scSwimDistance,SCMEET_TRUE)).observe(getViewLifecycleOwner(),new Observer<List<String>>() {
@Override
public void onChanged(@Nullable List<String> fastTime) {
freeTime = fastTime.get(0);
free_time.setText(freeTime);
try{
freeDelta.setValue(toMMSS(toMilli(freeTime) - toMilli(Integer.parseInt(free_qual.getText()))));
} catch(NumberFormatException e){}
}
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。