【问题标题】:How can i compare between two LiveData values in kotlin如何在 kotlin 中比较两个 LiveData 值
【发布时间】:2021-11-19 13:20:25
【问题描述】:

在这张图片中,“大于”有一个错误,我有两个 LiveData 值 _adder.value_quantity.value,我想在它们之间进行比较.

这是一个screen 这是error

【问题讨论】:

  • 错误是什么?
  • @ArpitShukla 已编辑
  • 我投票结束这个问题,因为你不应该使用截图来发布代码
  • 欢迎来到 StackOverflow!请参阅how to ask a good question 上的指南以及在需要时如何提供minimal reproducible example 以便人们可以尝试帮助您解决问题。在提出问题之前,您通常需要自己做功课和研究,而不是将屏幕截图作为代码包含在内。
  • 我是这个网站的新手,所以我不知道什么不能做什么,谢谢大家

标签: android android-studio kotlin


【解决方案1】:

实时数据值可以为空,因此您无法进行这种比较。来自 androidX LiveData java 类:

    @Nullable
    public T getValue() {
        Object data = mData;
        if (data != NOT_SET) {
            return (T) data;
        }
        return null;
    }

@Nullable 注释告诉 Kotlin 必须使值可以为空。这就是错误说的原因

Required Int
Found Int?
val adderValue = _adder.value //this is nullable
val quantityValue = _quantity.value //this is nullable

要解决您的问题,您必须决定如何处理 null

如果您希望该 null 等于零,则:

_adder.value ?: 0 < _quantity.value ?: 0

或者如果为null,那么什么都不应该发生,那么:

val adderValue = _adder.value ?: return
val quantityValue = _quantity.value ?: return
if (adderValue < quantityValue)

由于您要添加纸杯蛋糕,因此我推测您想要的是以下内容:

val adderValue = _adder.value ?: 0 //no additions before so is ok
val quantityValue = _quantity.value ?: return //null quantity is not ok, error we stop
if (adderValue < quantityValue) {
    _adder.value = adderValue++
}

您在_adder.value?.plus(1) 那里所做的不是更新实时数据值。

【讨论】:

    【解决方案2】:

    Kotlin 的相等运算符(== 和 !=)可以处理空值,而顺序比较运算符(、>=)不能。

    在进行比较之前,您必须检查可空性。

    如果实时数据为空(如 0),您也可以使用 Elvis 运算符使用另一个值,但我不建议使用此解决方案,因为 null 值与值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-22
      • 1970-01-01
      • 1970-01-01
      • 2015-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多