Kotlin:为什么我的 forEach / for 循环在 setEnabled() 之后的第一次迭代期间停止

时间:2021-06-21 05:04:24

标签: kotlin

我正在尝试在 forEach 循环中更新 UI,但程序在第一次迭代期间在按钮上调用 setEnabled() 后退出循环。

private var prod1Allowed = false
private var prod2Allowed = false


override fun onCreate(savedInstanceState: Bundle?) {
 //...
 startConnection()
 //...
}

// Manages connection to Google Billing API
fun startConnection(){

 billingClient().queryPurchasesAsync(
                    BillingClient.SkuType.INAPP
                ) { billingResult, productList ->
                    
                    Log.d(TAG, "The ${productList.size} owned products are ${productList.map { it.skus }}"
                    )

                    productList.forEach {
                        Log.d(
                            TAG,
                            "Current product is ${it.skus}"
                        )
                        if (it.skus.contains(PROD_1)) {
                            prod1Allowed = true
                            binding.prod1Button.setEnabled(true)

                            Log.d(TAG, "Prod 1 is allowed") // from here on not shown
                        }
                         if (it.skus.contains(PROD_2)) {
                            prod2Allowed = true
                            binding.prod2Button.setEnabled(true)
                            Log.d(TAG, "Prod 2 is allowed")
                        }
                    }

  }

 }

输出:

<块引用>

拥有的 2 个产品是 [[prod_1], [prod_2]]

<块引用>

当前产品是 [prod_1]

我也尝试过使用 for (it in productList) 但循环也在同一位置退出。

如果我不执行 setEnabled,我可以看到下一个元素被迭代。

Android Studio 没有发出警告(运行时也没有异常,初始化绑定也没有空指针异常),this answer on SO 解释说可以更改在 lambda 之外定义的变量。

所以 setEnabled() 调用似乎阻止了我的循环不按应有的方式流动,但在运行时没有错误。可以做什么?

感谢任何帮助

0 个答案:

没有答案