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

如何将数据从AppCompatDialog传递到AppCompatActivity及参数为空排查

问题修复方案

核心问题点

  • Intent创建后未调用startActivity():你构造了携带参数的Intent但没有执行跳转逻辑,第二个Activity根本没有通过这个Intent启动,自然拿不到参数。
  • 参数类型不匹配:你最初在Intent中传入的是Produkt类型的对象,但第二个Activity中尝试将其转换为ProduktVorrat类型,安全转换as?失败就会返回null。
  • 跳转时机错误:你的需求是把Dialog中生成的ProduktVorrat传递到第二个Activity,现在你在点击列表项时就构造Intent,此时还没有拿到Dialog生成的新数据,传参逻辑的位置完全不对。
  • Dialog存在笔误:你在Dialog中获取商品数量时,错误读取了价格输入框的内容,会导致生成的ProduktVorrat数据异常。

修复代码

第一个Activity(EinkaufslisteActivity)列表点击逻辑修改

adapter.setOnItemClickListener {
    val produkt = it
    // 删除原有的无效Intent构造代码,将跳转逻辑放到Dialog的确认回调中
    EinkaufslisteProduktGekauftDialog(this, produkt, object : AddDialogListener{
        override fun onAddButtonClicked(produkt: Produkt) {

        }
        override fun onAddButtonClickedVorrat(produktVorrat: ProduktVorrat) {
            viewModel.delete(produkt)
            // 拿到Dialog生成的ProduktVorrat后,再构造Intent跳转传参
            Intent(this@EinkaufslisteActivity, VorratslisteActivity::class.java).also { intent ->
                intent.putExtra("EXTRA_PRODUKT", produktVorrat)
                startActivity(intent)
            }
        }
    }).show()
}

Dialog参数获取逻辑修改

// 修正数量读取的笔误
val anzahl = etProduktGekauftAnzahl.text.toString()

额外注意事项

  • 确保ProduktVorrat类已经实现了Serializable或者Parcelable接口,否则Intent无法正常传递自定义对象,也会导致接收为null。
  • 如果你的项目适配了Android 13及以上系统,推荐使用intent.getSerializableExtra("EXTRA_PRODUKT", ProduktVorrat::class.java)的API获取参数,类型安全更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 07:27:04