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

Kotlin Android中使用Intent获取Double/Int数据遇默认值参数错误

解决Intent获取Double/Int数据时的"No value passed for parameter 'defaultValue'"错误

问题根源

  • getStringExtra(key) 仅需传入key参数,因为它返回可空类型String?,当找不到对应key时会返回null
  • getDoubleExtra 和 getIntExtra 必须传入第二个默认值参数——这两个方法返回的是非空基本类型(Double/Int),无法用null表示数据不存在的情况,所以必须提供默认值兜底

另外你的代码存在隐藏问题:传递price和image时传入的是字符串(比如"price"),但获取时用的是对应数值类型的方法,类型不匹配会导致即使解决默认值问题,也拿不到正确数据。

修复方案

1. 修正数据获取逻辑(ProductActivity中)

给getDoubleExtra和getIntExtra补充默认值,同时注意获取逻辑应该写在接收数据的ProductActivity中,而非MainActivity:

class ProductActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // 获取Intent传递的数据
        val title = intent.getStringExtra(KEY_TITLE) // 返回String?,无需默认值
        val price = intent.getDoubleExtra(KEY_PRICE, 0.0) // 传入默认值0.0
        val imageResId = intent.getIntExtra(KEY_IMAGE, 0) // 传入默认值0
        val category = intent.getStringExtra(KEY_CATEGORY)
    }

    companion object {
        const val KEY_TITLE = "title"
        const val KEY_PRICE = "price"
        const val KEY_IMAGE = "image"
        const val KEY_CATEGORY = "category"
    }
}

2. 修正数据传递逻辑(MainActivity中)

传递price和image时,要传入对应数值类型的数据,而非字符串:

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // ...其他初始化逻辑
    }

    private fun startProductActivity(productItem: ProductItem) {
        val intent = Intent(this, ProductActivity::class.java)
        intent.putExtra(ProductActivity.KEY_TITLE, productItem.title) // 传入String类型
        intent.putExtra(ProductActivity.KEY_PRICE, productItem.price) // 传入Double类型,如19.99
        intent.putExtra(ProductActivity.KEY_IMAGE, productItem.imageResId) // 传入Int类型,如R.drawable.product_photo
        intent.putExtra(ProductActivity.KEY_CATEGORY, productItem.category) // 传入String类型

        startActivity(intent)
    }
}

可选:获取可空的数值类型

如果需要判断数据是否存在(而非直接用默认值),可以结合hasExtra方法:

val price: Double? = if (intent.hasExtra(KEY_PRICE)) {
    intent.getDoubleExtra(KEY_PRICE, 0.0)
} else {
    null
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 17:18:06