You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio中如何从Firebase累加CartItem的quantity字段值

解决方法

你的代码问题在于使用了回调式的addOnCompleteListener,而suspend函数应该利用协程的异步能力直接获取结果,否则函数会在回调执行前就返回初始的0,无法得到正确的总和。修改后的代码如下:

suspend fun getTotalQuantity(userID: String): Int {
    return try {
        val querySnapshot = CartRepository.usersDocumentRef
            .document(userID)
            .collection("carts")
            .get()
            .await() // 用协程await()替代回调,阻塞直到结果返回

        querySnapshot.toObjects(CartItem::class.java)
            .sumOf { it.quantity } // 直接求和返回
    } catch (e: Exception) {
        // 处理查询失败的情况,比如返回0或者抛出异常,这里根据需求调整
        0
    }
}

修改要点:

  • 替换addOnCompleteListener为await():这是Firebase Kotlin SDK提供的协程扩展方法,让你可以在suspend函数中同步获取异步任务的结果,避免回调嵌套。
  • 使用sumOf简化求和:直接对转换后的CartItem列表调用sumOf方法,一行代码完成求和,比手动遍历累加更简洁。
  • 异常处理:用try-catch包裹查询逻辑,处理查询失败的场景(比如网络错误、权限问题),确保函数能正常返回值。

内容的提问来源于stack exchange,提问作者Unknown

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 09:45:42