0

我是编码和移动应用程序开发的相对新手,但我热衷、热情并想学习!

这是我对 SO 提出的第一个问题,如果我以我问的方式破坏了礼仪,请提前道歉。

我正在编写一个应用程序来跟踪游泳者的个人最佳时间,我几乎完成了使用 Room 查询 sql db 的编码,并使用正常的 dao、存储库和视图模型架构来返回我的游泳时间和资格赛时间。最后一步是从项目资格时间中减去游泳运动员的比赛时间。这就是我挣扎的地方!

最初,我尝试如下嵌套我的 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 源所需的工具。但是,我似乎无法使用建议的代码来解决我的问题。

实时数据数学运算

任何有助于理解此代码和解释 mediatorlivedata 如何工作的帮助都将被接受。不幸的是,Android 开发者参考在这方面并不是很有帮助。

提前致谢,

伊尔

4

1 回答 1

0

我也是初学者,所以我的回答可能会有错误,但我想建议这一点。“假设qualificationTime.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){}
                        }
                    });
于 2021-07-15T10:19:40.903 回答